在 Windows 程式設計中,元件之間的溝通核心是「訊息」。C++Builder 提供了三種發送訊息的方式:VCL 封裝的 Perform()、Win32 API SendMessage() 與 PostMessage()。三者雖然目的相同,但機制、適用場景與同步特性截然不同。
int __fastcall Perform(unsigned Msg, int WParam, int LParam);
TControl 的元件(擁有 Handle)。TMessage 記錄,呼叫 Dispatch() 送入元件的訊息處理鏈,**不經過系統訊息佇列**。CM_*)。Edit1->Perform(WM_SETTEXT, 0, (LPARAM)"新文字");LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
HWND 的視窗(含非 VCL 視窗、其他程式視窗)。BOOL PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
TRUE 代表成功放入佇列,不代表訊息已被處理。| 特性 | Perform() | SendMessage() | PostMessage() |
|---|---|---|---|
| 需 HWND | 否(元件實例) | 是 | 是 |
| 經過系統佇列 | 否 | 否 | 是 |
| 同步/非同步 | 同步 | 同步 | 非同步 |
| 跨進程 | 否 | 是 | 是 |
| 可發送給非 VCL 視窗 | 否 | 是 | 是 |
| 死結風險 | 低 | 高 | 無 |
Perform()。WM_GETTEXTLENGTH):用 SendMessage() 或 Perform()。PostMessage()。SendMessage()/PostMessage()。