用MFC制作程序启动LOGO
收藏!
新建mfc工程,把制作好的logo位图添加的资源中去,资源ID号设置为IDB_SPLASH。
新建类CSplashWnd,
#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); };
为各成员函数添加代码:
#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); }
其中消隐时间的设置为你喜欢的数值。
接下来,只需在MFC工程中的CMainFrame类中添加函数OnCreate,并在函数定义中添加语句CSplashWnd::ShowSplashScreen(this);
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 CSplashWnd::ShowSplashScreen(this); return 0; }
原文:http://blog.csdn.net/yang_xian521/article/details/7322619#