完了,這次土鱉了,介紹個非常過時的東西,其實就是自己收藏一下,怕以後想用的時候自己忘了。
直接進入正題,首先用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.2cto.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做好了,編譯運行吧,少年!~~