创建一个启动窗口,用来显示应用程序的相关信息
为了使该启动窗口再最早时刻被显示,启动窗口最好的位置可以放到InitInstance()中。
步骤:
1、创建一个从CWnd派生的启动窗口类,为方便可以用Class wizard
2、为该类添加Create()成员函数,用来显示相关信息。
void CSplashWnd::Create(UINT nID)
{
m_bitmap.LoadBitmapEx(nID,FALSE);
//make the window at center
int x=(::GetSysytemMetrics(SM_CYSCREEN)-mbitmap.m_Width)/2;
int y=(::GetSystemMetrics(SM_CYSCREEN)-m_bitmap.m_Height)/2;
CRect rect(x,y,x+m_bitmap.m_Width,y+m_bitmap.m_Height);
CreateEx(0,AfxRegisterWndClass ,0),"",
WS_POPUP|WS_VISIBLE|WS_BORDER,rect,null,0);
}
3、添加WM_PAINT消息处理函数,把需要的位图绘制到屏幕上
void CWzdSplash::OnPaint()
{
CPaintDC dc(this); // device context for painting
// get bitmap colors
CPalette *pOldPal =
d c . S e l e c t P a l e t t e ( m _ b i t m a p . G e t P a l e t t e ( ) , FA L S E ) ;
d c . R e a l i z e P a l e t t e ( ) ;
// get device context to select bitmap into
CDC dcComp;
d c C o m p . C r e a t e C o m p a t i b l e D C ( & d c ) ;
d c C o m p . S e l e c t O b j e c t ( & m _ b i t m a p ) ;
// draw bitmap
d c . B i t B l t ( 0 , 0 , m _ b i t m a p . m _ Width,
m_bitmap.m_Height, &dcComp,0,0,SRCCOPY);
// reselect old palette
d c . S e l e c t P a l e t t e ( p O l d P a l , FA L S E ) ;
}
4、在应用程序类的InitInstance()函数开始处,创建启动窗口类的一个实例,并Create().
CSplashWnd spWnd;
spWnd.Create(IDB_BITMAP);//create with your bitmap
spWnd.UpdateWindow();//send WM_PAINT
5、根据程序初始化时间的长短,可是适当改变窗口显示时间。
Sleep(time);//postpone splash time
6、以前还看过另外介绍splash的文章,方法和这个不一样,不知道还能不能找到。
评论