#define WM_MY_MESSAGE (WM_USER + 100)
LRESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam) {
// 處理邏輯
return 0;
}
class CMainFrame : public CMDIFrameWnd {
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT);
afx_msg void OnTimer(UINT);
afx_msg LRESULT OnMyMessage(WPARAM, LPARAM); // 新增
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage) // 新增
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
ClassWizard 重新掃描後會識別此訊息,後續可在訊息列表中看到 WM_MY_MESSAGE,雙擊即可跳轉至處理函數,享受與標準訊息同等的 IDE 支援。
// 工作執行緒
UINT ThreadProc(LPVOID p) {
// ... 耗時運算 ...
::PostMessage(AfxGetMainWnd()->GetSafeHwnd(), WM_MY_MESSAGE, (WPARAM)hThread, result);
return 0;
}
// 主視窗處理
LRESULT CMainFrame::OnMyMessage(WPARAM w, LPARAM l) {
HANDLE h = (HANDLE)w; int res = (int)l;
// 更新進度條、啟用按鈕、顯示結果...
return 0;
}
RegisterWindowMessage 取得全域唯一 IDPostMessage + 堆疊分配或共享記憶體)