当前位置:编程学习 > C/C++ >>

用mfc制作程序启动logo

完了,这次土鳖了,介绍个非常过时的东西,其实就是自己收藏一下,怕以后想用的时候自己忘了。

直接进入正题,首先用ps等工具做一个自己喜欢的程序启动的logo位图,我这里制作的logo大小为500*313,比例为黄金比例,看上去很舒服。

新建mfc工程,把制作好的logo位图添加的资源中去,资源ID号设置为IDB_SPLASH。

新建类CSplashWnd,

[cpp]
#pragma once 
#include "afxwin.h" 
 
class CSplashWnd : 
    public CWnd 

public: 
    CSplashWnd(void); 
    ~CSplashWnd(void); 
    CBitmap m_bitmap; 
    static void ShowSplashScreen(CWnd* pParentWnd = NULL); 
protected: 
    BOOL Create(CWnd* pParentWnd = NULL);    
    static CSplashWnd* c_pSplashWnd; 
public: 
    DECLARE_MESSAGE_MAP() 
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 
    afx_msg void OnPaint(); 
    afx_msg void OnTimer(UINT_PTR nIDEvent); 
}; 

为各成员函数添加代码:

[cpp]
#include "StdAfx.h" 
#include "SplashWnd.h" 
#include "resource.h" 
 
CSplashWnd* CSplashWnd::c_pSplashWnd; 
 
BEGIN_MESSAGE_MAP(CSplashWnd, CWnd) 
    ON_WM_CREATE() 
    ON_WM_PAINT() 
    ON_WM_TIMER() 
END_MESSAGE_MAP() 
 
CSplashWnd::CSplashWnd(void) 
/*: c_pSplashWnd(NULL)*/ 


 
CSplashWnd::~CSplashWnd(void) 


 
void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd) 

    c_pSplashWnd = new CSplashWnd; 
    if (!c_pSplashWnd->Create(pParentWnd)) 
        delete c_pSplashWnd; 
    else 
        c_pSplashWnd->UpdateWindow(); 

 
BOOL CSplashWnd::Create(CWnd* pParentWnd) 

    if (!m_bitmap.LoadBitmap(IDB_SPLASH))   /*加载位图资源,需在资源文件中添加*/ 
        return FALSE; 
 
    BITMAP bm; 
    m_bitmap.GetBitmap(&bm); 
 
    return CreateEx(0, 
        AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)), 
        NULL, WS_POPUP | WS_VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight, pParentWnd->GetSafeHwnd(), NULL); 
    return 0; 

 
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 

    if (CWnd::OnCreate(lpCreateStruct) == -1) 
        return -1; 
 
    // TODO:  在此添加您专用的创建代码 
    // Center the window. 
    CenterWindow(); 
 
    // Set a timer to destroy the splash screen. 
    SetTimer(1, 1000, NULL);                /*设置消隐时间*/ 
 
    return 0; 

 
void CSplashWnd::OnPaint() 

    CPaintDC dc(this); // device context for painting 
    // TODO: 在此处添加消息处理程序代码 
    // 不为绘图消息调用 CWnd::OnPaint() 
    CDC dcImage; 
    if (!dcImage.CreateCompatibleDC(&dc)) 
        return; 
 
    BITMAP bm; 
    m_bitmap.GetBitmap(&bm); 
 
    // Paint the image. 
    CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap); 
    dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY); 
    dcImage.SelectObject(pOldBitmap); 

 
void CSplashWnd::OnTimer(UINT_PTR nIDEvent) 

    // TODO: 在此添加消息处理程序代码和/或调用默认值 
    DestroyWindow(); 
    AfxGetMainWnd()->UpdateWindow(); 
 
    CWnd::OnTimer(nIDEvent); 

其中消隐时间的设置为你喜欢的数值。www.zzzyk.com

接下来,只需在MFC工程中的CMainFrame类中添加函数OnCreate,并在函数定义中添加语句CSplashWnd::ShowSplashScreen(this);

[cpp]
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

    if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
        return -1; 
 
    // TODO:  在此添加您专用的创建代码 
    CSplashWnd::ShowSplashScreen(this); 
 
    return 0; 

好了,你的程序启动logo做好了,编译运行吧,少年!~~ 


摘自  yang_xian521 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,