在 C++ Builder 開發中,元件之間傳遞訊息是常見需求。VCL 提供 Perform() 方法,同時也可直接呼叫 Windows API SendMessage() 與 PostMessage()。三者雖皆能傳遞訊息,但適用場景與行為有顯著差異。
TControl 及其衍生類別,不依賴 Windows APITMessage 記錄,呼叫 Dispatch() 分派int __fastcall Perform(unsigned Msg, int WParam, int LParam);
// 範例
int RetVal = ControlName->Perform(MessageID, wParam, lParam);
HWND) 可用LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
BOOL PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
| 特性 | SendMessage() | PostMessage() |
|---|---|---|
| 傳遞方式 | 直接呼叫視窗程序 | 放入訊息佇列 |
| 同步性 | 同步阻塞 | 非同步,立即返回 |
| 回傳值 | 視窗程序處理結果 | 張貼成功與否 (BOOL) |
| 訊息順序 | 立即處理,不經佇列排序 | 依佇列順序處理 |
Perform(),型別安全、程式碼可讀性佳SendMessage()(需同步結果)或 PostMessage()(非同步通知)SendMessageTimeout()hWnd:接收訊息視窗的控制代碼Msg:訊息識別碼 (如 WM_CLOSE, WM_USER+1)wParam / lParam:32 位元附加資訊,具體含義視訊息而定