MFC 專案中常見兩種跨視窗/執行緒更新 UI 的情境:
定義使用者訊息 WM_USER_UPDATE_UI = WM_USER + 1,透過 PostMessage 將資料封裝在 WPARAM/LPARAM 中發送至目標視窗,由目標視窗的訊息處理器在 UI 執行緒安全地更新介面。
// 子對話框或工作執行緒發送
::PostMessage(hMainWnd, WM_USER_UPDATE_UI, (WPARAM)dataPtr, 0);
// 主對話框訊息映射
ON_MESSAGE(WM_USER_UPDATE_UI, OnUpdateUI)
LRESULT CMainDlg::OnUpdateUI(WPARAM wParam, LPARAM lParam) {
MyData* pData = (MyData*)wParam;
// 安全更新 UI
delete pData; // 注意所有權轉移
return 0;
}
PostMessage 非同步佇列,UI 執行緒按序處理,避免並發衝突。切記:任何非 UI 執行緒嚴禁直接操作 MFC 控件,訊息機制是標準解法。