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

C++Builder TApplication 類核心指南:應用程式生命週期、訊息循環與全域控制

     編輯:VC 教學

前言

TApplication 封裝 Windows 應用程式的核心行為:訊息泵、例外處理、說明系統、提示顯示、主視窗管理等。每個 C++Builder 專案自動建立全域實例 Application,是 VCL 架構的中樞。

類別繼承

TObject
  └── TPersistent
       └── TComponent
            └── TApplication

核心屬性分類

1. 應用程式狀態

屬性型別說明
Activebool應用程式是否為前景作用中
Terminatedbool是否收到 WM_QUIT 訊息
ShowMainFormbool啟動時是否顯示主表單
MainFormTForm*主表單實例(專案選項設定)

2. 視覺與提示

屬性型別說明
Titlestring工作列圖示下的標題文字
IconTIcon*工作列圖示
Hint / HintColorstring / TColor提示文字與背景色
HintPause / HintHidePause / HintShortPauseint提示顯示/隱藏/再次顯示延遲(毫秒)
ShowHintbool全域啟用/停用提示

3. 關鍵路徑與資源

屬性型別說明
ExeNamestring執行檔完整路徑
HelpFilestring說明檔路徑(.chm/.hlp)
HandleHWND應用程式主視窗控制代碼

4. 格式與度量設定

屬性型別說明
UpdateFormatSettingsbool自動更新地區格式設定(日期/數字)
UpdateMetricSettingsbool自動更新提示字體/圖示標題字體

關鍵方法

方法說明
Run()啟動訊息循環,進入主迴圈(WinMain 呼叫)
Terminate()發送 WM_QUIT,結束 Run()
ProcessMessages()處理佇列中所有待決訊息(保持 UI 回應)
HandleMessage()處理單一訊息並返回
CreateForm()建立並註冊表單(自動產生程式碼呼叫)
MessageBox()顯示系統訊息方塊
Minimize() / Restore()最小化/還原應用程式
NormalizeTopMosts() / RestoreTopMosts()管理 fsStayOnTop 視窗行為
HelpCommand() / HelpContext() / HelpJump()說明系統導航
ShowException()顯示未捕捉例外對話框
HookMainWindow() / UnhookMainWindow()掛鉤/解除主視窗訊息(非 VCL 對話框用)

訊息循環核心機制

Application->Run() 內部實現近似:

while (GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);  // 產生 WM_CHAR 等字元訊息
    DispatchMessage(&msg);   // 分發至對應視窗程序
}

ProcessMessages() 同樣循環但處理完佇列即返回,常用於長時間運算中保持 UI 回應。

實戰應用範例

取得執行檔目錄

AnsiString exeDir = ExtractFileDir(Application->ExeName);

自訂未捕捉例外處理

void __fastcall TForm1::AppException(TObject* Sender, Exception* E) {
    LogError(E->Message);
    Application->ShowException(E); // 仍顯示預設對話框
}

// 專案原始碼中設定
Application->OnException = AppException;

控制提示顯示風格

Application->HintPause = 500;      // 0.5 秒後顯示
Application->HintHidePause = 3000; // 3 秒後隱藏
Application->HintColor = clInfoBk; // 背景色

啟動外部程式並等待

AnsiString cmd = "notepad.exe readme.txt";
if (ShellExecute(Application->Handle, "open", cmd.c_str(), NULL, NULL, SW_SHOWNORMAL) <= 32)
    ShowMessage("啟動失敗");

專案選項中的 Application 頁面

IDE 選單 Project → Options → Application 可視化設定:

  • Title、HelpFile、Icon、MainForm
  • 啟動時顯示主表單、Application Manifest (DPI/UAC)

注意事項

  • Application 為全域單例,**不可手動建構/解構**
  • Web 伺服器應用程式類型不同(TWebApplication),屬性部分差異
  • 多執行緒呼叫 VCL 方法必須透過 Synchronize,Application 方法同樣適用
  • ProcessMessages() 可能導致重進入,謹慎使用,優先考慮執行緒

結語

TApplication 是 C++Builder 應用程式的大腦,掌握其訊息循環、例外處理、提示系統與全域資源管理,能讓開發者從容應對啟動流程客製化、跨執行緒 UI 安全、外部程式整合等進階需求。

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