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

C++Builder 實現啟動畫面:主視窗顯示前顯示版權/載入視窗

     編輯:VC 教學

核心思路

  1. 建立第二個表單 (TAboutBox) 作為啟動畫面。
  2. 從專案自動建立清單中**移除**該表單 (手動建立/釋放)。
  3. 在 WinMain 中:建立啟動畫面 → Show/Update → 建立主表單 → 延遲 → 隱藏/釋放啟動畫面 → Application->Run()。

步驟詳解

1. 建立啟動畫面表單

  • File → New Form,設計外觀 (Logo、版本、進度條、版權資訊)。
  • 儲存為 AboutBox.cpp/h,類別名 TAboutBox。

2. 移除自動建立

  • Project → Options → Forms,將 AboutBox 從「Auto-create forms」移至「Available forms」。

3. 修改專案源碼 (Project1.cpp)


#include 
#pragma hdrstop
#include "AboutBox.h" // 包含啟動畫面標頭
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1); // 主表單
USEFORM("AboutBox.cpp", AboutBox); // 可用但不自動建立
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try {
        Application->Initialize();
        // 1. 建立並顯示啟動畫面
        AboutBox = new TAboutBox(AboutBox); // Owner 為自身或 NULL
        AboutBox->Show();
        AboutBox->Update(); // 強制立即繪製,避免閃爍

        // 2. 記錄開始時間 (模擬載入耗時)
        DWORD startTime = GetTickCount();

        // 3. 建立主表單 (此時可能執行耗時初始化)
        Application->CreateForm(__classid(TForm1), &Form1);

        // 4. 確保最小顯示時間 (如 3 秒)
        while ((GetTickCount() - startTime) < 3000) {
            Application->ProcessMessages(); // 保持啟動畫面回應
            Sleep(10);
        }

        // 5. 關閉啟動畫面
        AboutBox->Hide();
        delete AboutBox; // 或 AboutBox->Free();
        AboutBox = NULL;

        // 6. 進入主訊息迴圈
        Application->Run();
    }
    catch (Exception &exception) {
        Application->ShowException(&exception);
    }
    return 0;
}

進階:載入進度回報


// AboutBox.h 增加公共方法
void __fastcall SetProgress(int percent, const String &status);

// WinMain 中
AboutBox->SetProgress(10, "正在載入設定...");
Application->CreateForm(__classid(TSettings), &Settings);
AboutBox->SetProgress(40, "正在連接資料庫...");
Database->Connect();
AboutBox->SetProgress(70, "正在載入模組...");
LoadPlugins();
AboutBox->SetProgress(100, "啟動完成");

關鍵細節

點說明
AboutBox->Update()強制處理 WM_PAINT,確保啟動畫面立即可見,否則可能卡在主表單建構子中。
Application->ProcessMessages()在等待迴圈中呼叫,保持啟動畫面可移動、重繪、響應關閉按鈕。
最小顯示時間避免啟動過快導致畫面一閃而過,體驗差。
Owner 設定new TAboutBox(AboutBox) 自己擁有自己,或 new TAboutBox(Application) 由 Application 擁有。
異常安全建構子拋出異常時,catch 區塊會顯示異常,但 AboutBox 可能洩漏,建議用智慧指標或 try/finally。

現代替代:Splash Screen 元件

  • 第三方元件 (TMS, DevExpress, Raize) 提供 TSplashScreen,支援淡入淡出、動畫、多執行緒載入。
  • VCL 內建無此元件,但可參考 TSplashScreen 開源實作。

無主視窗模式 (隱藏主表單)


// 專案源碼修改
Application->ShowMainForm = false; // 不自動顯示主表單
ShowWindow(Application->Handle, SW_HIDE); // 隱藏應用程式工作列按鈕
// 後續由啟動畫面或托盤圖示決定何時顯示主表單

啟動畫面流程圖

啟動畫面不僅美化體驗,更能掩蓋主表單複雜初始化的延遲,是專業級桌面應用的標配。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved