扉页制作
创建一个MFC类CSplashWnd,基类是CWnd。 然后自己找一张Bmp放在工程的res文件夹下,并在VS->资源视图->点击右键,添加资源,选择bitmap,令其ID号为IDB_SPLASH. 然后CSplashWnd类的头文件和cpp文件如下:
#pragma once
class CSplashWnd : public CWnd
{
DECLARE_DYNAMIC ( CSplashWnd)
public :
CSplashWnd ( ) ;
virtual ~ CSplashWnd ( ) ;
virtual void PostNcDestroy ( ) ;
protected :
afx_msg int OnCreate ( LPCREATESTRUCT lpCreateStruct) ;
afx_msg void OnPaint ( ) ;
afx_msg void OnTimer ( UINT nIDEvent) ;
DECLARE_MESSAGE_MAP ( )
protected :
static CSplashWnd* m_pSplashWnd;
bool Create ( CWnd* pParentWnd) ;
public :
CBitmap m_bitmap;
static void ShowSplashScreen ( CWnd* pParentWnd) ;
} ;
#include "stdafx.h"
#include "SplashWnd.h"
CSplashWnd* CSplashWnd:: m_pSplashWnd;
IMPLEMENT_DYNAMIC ( CSplashWnd, CWnd)
CSplashWnd:: CSplashWnd ( )
{
}
CSplashWnd:: ~ CSplashWnd ( )
{
ASSERT ( m_pSplashWnd == this ) ;
m_pSplashWnd = NULL ;
}
BEGIN_MESSAGE_MAP ( CSplashWnd, CWnd)
ON_WM_CREATE ( )
ON_WM_PAINT ( )
ON_WM_TIMER ( )
END_MESSAGE_MAP ( )
void CSplashWnd:: ShowSplashScreen ( CWnd* pParentWnd)
{
if ( m_pSplashWnd != NULL ) return ;
m_pSplashWnd = new CSplashWnd;
if ( ! m_pSplashWnd- > Create ( pParentWnd) )
delete m_pSplashWnd;
else
m_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 ) ;
}
int CSplashWnd:: OnCreate ( LPCREATESTRUCT lpCreateStruct)
{
if ( CWnd:: OnCreate ( lpCreateStruct) == - 1 )
return - 1 ;
CenterWindow ( ) ;
SetTimer ( 1 , 1000 , NULL ) ;
return 0 ;
}
void CSplashWnd:: OnPaint ( )
{
CPaintDC dc ( this ) ;
CDC dcImage;
if ( ! dcImage. CreateCompatibleDC ( & dc) ) return ;
BITMAP bm;
m_bitmap. GetBitmap ( & bm) ;
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 nIDEvent)
{
DestroyWindow ( ) ;
AfxGetMainWnd ( ) - > UpdateWindow ( ) ;
CWnd:: OnTimer ( nIDEvent) ;
}
void CSplashWnd:: PostNcDestroy ( void )
{
DestroyWindow ( ) ;
CWnd:: PostNcDestroy ( ) ;
}