首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 啟動畫面 四種實作方案完整指南:從元件庫到對話框架構

     編輯:VC 教學

啟動畫面價值

  • 緩解大型程式載入等待的枯燥感。
  • 展示品牌、版本、版權等資訊,強化專業形象。

方案一:MFC 元件庫 Splash Screen 元件 (最簡單)

  1. Photoshop 製作圖片 → 存為 BMP。
  2. AppWizard 建立 SDI 專案。
  3. 資源匯入 BMP,ID 改為 IDB_SPLASH。
  4. 專案 → 加入元件 → 「Visual C++ Components」 → 「Splash Screen」 → 確認類別名與圖片 ID。
  5. 編譯即得。修改停留時間:CSplashWnd::OnCreate 中 SetTimer(1, 750, NULL),單位毫秒。

方案二:非模態對話框 + Sleep 阻塞 (直觀易懂)

  1. 建立 SDI 專案,匯入圖片 ID IDB_SPLASH。
  2. 新增對話框資源,類別 CSplashDlg,放入 Picture 控制項,Type=Bitmap, Image=IDB_SPLASH。
  3. 屬性調整:移除標題列、按鈕,圖片置中填滿。
  4. 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;
}

方案三:非模態對話框 + 定時器訊息 (非阻塞主執行緒)

  1. 步驟 1-3 同方案二。
  2. MainFrm.h 宣告 CSplashDlg* m_pSplash;。
  3. 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,無法直接用前三法。移植步驟:

  1. 用方案一建立 Splash 專案,產生 Splash1.h/.cpp。
  2. 建立對話框專案 Cover。
  3. 複製 Splash1.h/.cpp 到 Cover 專案,加入原始碼/標頭檔。匯入 BMP 設 ID IDB_SPLASH。
  4. 修改 CCoverApp::InitInstance:
#include "Splash1.h"
BOOL CCoverApp::InitInstance() {
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash); // 關鍵啟用
    // ... 原有初始化 ...
}
  1. 用 ClassWizard 給對話框類 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方案四唯一可行路徑
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved