IDB_SPLASH。CSplashWnd::OnCreate 中 SetTimer(1, 750, NULL),單位毫秒。IDB_SPLASH。CSplashDlg,放入 Picture 控制項,Type=Bitmap, Image=IDB_SPLASH。CMainFrame::OnCreate 中建立/顯示/銷毀:#include "SplashDlg.h"
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
CSplashDlg* dlg = new CSplashDlg(this);
dlg->Create(CSplashDlg::IDD, this);
dlg->ShowWindow(SW_SHOW);
dlg->UpdateWindow();
Sleep(2000); // 停留 2 秒
// ... 框架繼續初始化 ...
dlg->DestroyWindow();
return 0;
}
MainFrm.h 宣告 CSplashDlg* m_pSplash;。OnCreate 啟動定時器並建立對話框:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
SetTimer(1, 0, NULL); // 立即觸發 WM_TIMER
m_pSplash = new CSplashDlg();
m_pSplash->Create(IDD_DIALOG1);
m_pSplash->ShowWindow(SW_SHOW);
return 0;
}
void CMainFrame::OnTimer(UINT nIDEvent) {
if (m_pSplash->IsWindowVisible()) {
m_pSplash->SetActiveWindow();
m_pSplash->UpdateWindow();
Sleep(2000); // 實際顯示時間
m_pSplash->SendMessage(WM_CLOSE);
} else {
SetActiveWindow();
KillTimer(1);
}
CFrameWnd::OnTimer(nIDEvent);
}
對話框專案無 CMainFrame,無法直接用前三法。移植步驟:
Splash 專案,產生 Splash1.h/.cpp。Cover。Splash1.h/.cpp 到 Cover 專案,加入原始碼/標頭檔。匯入 BMP 設 ID IDB_SPLASH。CCoverApp::InitInstance:#include "Splash1.h"
BOOL CCoverApp::InitInstance() {
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash); // 關鍵啟用
// ... 原有初始化 ...
}
CCoverDlg 加 OnCreate:#include "Splash1.h"
int CCoverDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) {
if (CDialog::OnCreate(lpCreateStruct) == -1) return -1;
CSplashWnd::ShowSplashScreen(this); // 顯示啟動畫面
return 0;
}
停留時間修改同方案一 (CSplashWnd::OnCreate 中 SetTimer)。
| 專案類型 | 推薦方案 | 特點 |
|---|---|---|
| SDI/MDI | 方案一 | 零代碼、維護簡單 |
| SDI/MDI 需自訂動畫/進度 | 方案三 | 非阻塞、可擴展 |
| Dialog-based | 方案四 | 唯一可行路徑 |