MFC啟動(dòng)畫面設(shè)計(jì)玩過微軟的Office的人都知道,每當(dāng)打開Office軟件,在它初始化的那段時(shí)間里,都會(huì)出現(xiàn)一個(gè)畫面,這個(gè)畫面就是啟動(dòng)畫面。 所謂啟動(dòng)畫面也就是Splash Screen,你也可以說它是“炫耀畫面”。它常常用以顯示公司的標(biāo)志和版權(quán)等信息。 目標(biāo)用一張位圖來作為啟動(dòng)畫面,在進(jìn)入程序時(shí)顯示。 策略在應(yīng)用程序類的I n i t I n s t a n c e ()函數(shù)中,在最早時(shí)刻創(chuàng)建啟動(dòng)窗口。啟動(dòng)窗口用一個(gè)位圖類顯示在普通窗口中。 步驟
1.
1)
2) void CWzdSplash::Create(UINT nBitmapID) { m_bitmap.LoadBitmap(nBitmapID); BITMAP bitmap; m_bitmap.GetBitmap(&bitmap); int x=(::GetSystemMetrics(SM_CXSCREEN)-bitmap.bmWidth)/2; int y=(::GetSystemMetrics(SM_CYSCREEN)-bitmap.bmHeight)/2; CRect rect(x,y,x+bitmap.bmWidth,y+bitmap.bmHeight); CreateEx(0,AfxRegisterWndClass(0),"",WS_POPUP|WS_VISIBLE|WS_BORDER,rect,NULL,0); }
3) void CWzdSplash::OnPaint() { CPaintDC dc(this); // device context for painting BITMAP bitmap; m_bitmap.GetBitmap(&bitmap); CDC dcComp; dcComp.CreateCompatibleDC(&dc); dcComp.SelectObject(&m_bitmap); // draw bitmap dc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcComp,0,0,SRCCOPY); } 2.把啟動(dòng)窗口類插入到InitInstance()函數(shù)中 1) 在應(yīng)用程序類的InitInstance()函數(shù)的開始處,創(chuàng)建該啟動(dòng)類的一個(gè)實(shí)例,調(diào)用它的Create(),并強(qiáng)制它進(jìn)行繪制。 CWzdSplash wndSplash; 2) 因?yàn)閱?dòng)窗口類創(chuàng)建在堆棧中,一旦InitInstance()返回,該窗口將被自動(dòng)銷毀,因此,如果應(yīng)用程序花費(fèi)大量時(shí)間進(jìn)行初始化,則不必采用在應(yīng)用程序中加延時(shí)的方法,使啟動(dòng)窗口停留足夠長的時(shí)間以確保讀取顯示的信息;如果應(yīng)用程序花費(fèi)很少時(shí)間進(jìn)行初始化,或者擔(dān)心高速機(jī)器把啟動(dòng)窗口變成影像,添加下面代碼行到InitInstance( )的某個(gè)地方以對(duì)應(yīng)用程序進(jìn)行延時(shí)處理。
至此,一個(gè)具有啟動(dòng)畫面的小程序完成了,大家可以試試看它的運(yùn)行效果。 |
|
|