很多基於對話框的程序都有一個啟動畫面,那麼如何為自己的對話框程序也加一個這樣的畫面呢?本文將一步一步教你實現每一個細節。其實VC++開發環境中有一個現成的 Splash Screen 組件,用這個組件很容易實現基於框架類(也就是CMainFrame)的程序的啟動畫面,那麼如果是對話框程序,沒有框架類怎麼辦呢?所以這個組件功能不是想象的那麼強。要實現基於對話框應用程序的啟動畫面必須另辟蹊徑。本文將定制一個C++類:CSplashWnd,用這個類可以增強原來的 Splash Screen 組件功能。它不但可以在用於具有CMainFrame的程序,同時也可以用於基於對話框應用的程序。
CSplashWnd的使用方法如下:
思路
需要改寫三個函數:
CDialog::OnInitDialog()
CWinApp::InitInstance()
CWinApp::PreTranslateMessage(MSG* pMsg)
如果你用應用程序向導(AppWizard)創建工程,那麼它會自動在CWinApp.h和CWinApp.cpp文件中產生 OnInitDialog 和 InitInstance 的聲明和實現的默認代碼,但是與CWinApp::PreTranslateMessage(MSG* pMsg)有關的處理必須自己添加到CWinApp派生類中。
具體步驟:
第一步:
在CDialog::OnInitDialog()方法末尾添加下列代碼:
// 創建並顯示啟動畫面
CSplashWnd::ShowSplashScreen(3000, IDB_SPLASH24, this);
ShowSplashScreen函數的第一個參數是超時時間,以毫秒計算,表示啟動畫面持續顯示的時間;第二個參數是位圖圖像的資源標示符,表示啟動畫面顯示的圖像。最後一個參數是父窗口,此參數可以為NULL。
第二步:
在CWinApp::InitInstance()方法的開始處添加如下代碼:
// Enable the splash screen component based on the command line info.
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);
這幾行代碼的作用是讓程序能解析和處理命令行信息。
第三步:
用類向導(ClassWizard)改寫 CWinApp::PreTranslateMessage(MSG* pMsg)方法,並添加如下代碼:
BOOL CDialogsplApp::PreTranslateMessage(MSG* pMsg)
{
// Route messages to the splash screen while it is visible
if (CSplashWnd::PreTranslateAppMessage(pMsg)) {
return TRUE;
}
return CWinApp::PreTranslateMessage(pMsg);
}
編譯運行程序。
本文配套源碼