用VC製作應用程序啓動畫面

使用啓動畫面一是可以減少等待程序加載過程中的枯燥感(尤其是一些大型程序);二是 可以用來顯示軟件名稱和版權等提示信息。怎樣使用VC++製作應用程序的啓動畫面呢?本文提供四種方法。前三種適用於基於文檔的應用程序,第四種適用於基於對話框的應用程 序。 

1.利用組件庫中的Splash Screen組件實現 
(1)用Photoshop等製作啓動畫面圖像,保存爲bmp格式。 
(2)用Appwizard建一個基於單文檔的工程Splash。 
(3)在資源中插入位圖資源 
打開VC++的資源編輯器,用鼠標右鍵單擊Resources文件夾,選擇Import命令,插入所製作的位圖。如果位圖超過256色,VC會彈出一個對話框,提示位圖已經插入但不能在位圖編輯器中顯示,確定即可。將位圖ID改爲IDB_SPLASH。 
(4)添加Splash Screen控件 
①選擇菜單“project”/“Add To Project”/“Conponents and Controls”打開對話框 ,在列表框中雙擊“Visual C++ Conponents”選項,選擇“Splash Screen”控件,然後單擊“Insert”。 
②確認或修改類名和位圖資源ID,單擊OK確認。 
③編譯、連接,漂亮的啓動畫面就顯示出來了。 
(5)如果需要改變啓動畫面的停留時間,就修改SetTimer()函數的第二個參數,默認是750 毫秒。該函數所在位置: 
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 

 ... 
   // Set a timer to destroy the splash screen. 
   SetTimer(1, 750, NULL); //修改第二個參數以調整畫面停留時間 
   return 0; 


2.利用無模式對話框顯示啓動畫面 
(1)用Appwizard建一個基於單文檔的工程Splash。 
(2)導入用作啓動畫面的圖片,更改ID爲IDB_SPLASH。 
(3)新建一個對話框,在其中添加啓動畫面。 
在資源中新建一個對話框,創建對話框類CSplashDlg。在對話框中添加一個Picture控件,打開其“Properties”對話框,選General,在Type下拉列表中選擇Bitmap,在Image下拉 列表中選前面導入的位圖資源ID值:IDB_SPLASH。 
(4)修改對話框的顯示效果 
①調整對話框大小,去掉兩個自動生成的按鈕,並在“Properties”的“Styles”頁中去掉對Title bar的選取; 
②選中圖像,調整大小使之適應對話框的可編輯區,修改其“Properties”的“Styles” 使之居中。 
(5)在CMainFrame類的OnCreate()函數中添加創建、顯示並銷燬無模式對話框的代碼。 
#i nclude “SplashDlg.h” //加到MainFrm.cpp文件的頭文件調用部位 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

CSplashDlg *dlg = new CSplashDlg(this); 
dlg->Create(CSplashDlg::IDD,this); //創建對話框 
dlg->ShowWindow(SW_SHOW); //顯示對話框 
dlg->UpdateWindow(); 
Sleep(2000); //畫面顯示停留時間,單位爲毫秒 
… 
dlg->DestroyWindow(); //銷燬對話框 
return 0; 


3.通過發送消息顯示和銷燬啓動畫面 
①重複方法二的步驟1至步驟4。 
②使用Class Wizard爲CMainFrame類添加消息響應函數WM_TIMER。 
③)修改代碼,通過發送WM_TIMER消息啓動和銷燬啓動畫面 
1)定義對話框類的變量 
在MainFrm.h文件頭部添加#i nclude "SplashDlg.h",並在CMainFram類的定義中加上公用 變量CSplashDlg *Splash。 
2)添加計時器消息相應函數代碼 
void CMainFrame::OnTimer(UINT nIDEvent) 

if(Splash->IsWindowVisible()){ 
Splash->SetActiveWindow(); //把啓動畫面設置爲當前活動窗口 
Splash->UpdateWindow(); 
Sleep(2000); //修改此處可更改畫面顯示時間 
Splash->SendMessage(WM_CLOSE); //關閉對話框 

else{ 
SetActiveWindow(); 
KillTimer(1) ; //清除WM_TIMER事件 


3)修改框架生成函數OnCreate() 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

SetTimer(1,0,NULL); //添加ID爲1的WM_TIMER事件 
Splash=new CSplashDlg(); 
Splash->Create(IDD_DIALOG1); 
Splash->ShowWindow(SW_SHOW); 
… 


4.製作基於對話框的應用程序啓動畫面 
以上幾種方法都不能給基於對話框的應用程序做啓動畫面,下面介紹一種方法給基於對話框的應用程序做啓動畫面。基於對話框的應用程序沒有主框架,因此不能採用前面幾種方法制作啓動畫面。不過我們可以把方法一建立起的啓動畫面文件移植過來,然後,對程序進行一些修改。 
(1)參照方法一建立基於單文檔的工程Splash。 
(2)建立基於對話框的工程Cover。 
(3)文件移植 
①將Splash1.cpp 和Splash1.h 兩個文件從方法一建立的Splash工程拷貝到Cover工程中, 
並且分別加入到Source Files和Header Files中; 
②導入位圖文件到工程的資源中,改ID爲IDB_SPLASH。 
(4)修改代碼,實現啓動畫面的調用 
①添加CCoverApp 的InitInstance() 函數代碼 
#i nclude "Splash1.h" //加在Cover.cpp文件的頭文件調用部位 
BOOL CCoverApp::InitInstance() 

CCommandLineInfo cmdInfo; 
ParseCommandLine(cmdInfo); 
CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash); 
... 

②使用ClassWizard 添加OnCreate() 函數到對話框類CCoverDlg中,並修改代碼 
#i nclude "Splash1.h" //加在CoverDlg.cpp文件的頭文件調用部位 
int CCoverDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 

... 
CSplashWnd::ShowSplashScreen(this); //顯示啓動畫面 
... 

說明:啓動畫面停留時間的修改同方法一。 

5.結束語 
正如前面提過的,運用好啓動畫面可以給使用者留下一個強烈的印象,起到很好的宣傳作用,以上程序均在Visual C++ 6.0、Windows2000調試通過。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章