MFC 自定義訊息 (WM_USER + x) 可透過 WPARAM、LPARAM 傳遞自訂資料:
// 定義訊息
#define WM_MY_DRAW (WM_USER + 100)
// 發送端:傳遞座標點
CPoint pt(100, 200);
pWnd->PostMessage(WM_MY_DRAW, (WPARAM)pt.x, (LPARAM)pt.y);
// 或傳遞結構體指標 (需確保接收端處理完前記憶體有效)
MYDATA* pData = new MYDATA{...};
pWnd->PostMessage(WM_MY_DRAW, 0, (LPARAM)pData); // 接收端負責 delete
// 接收端訊息映射
ON_MESSAGE(WM_MY_DRAW, OnMyDraw)
// 處理函數
afx_msg LRESULT OnMyDraw(WPARAM wParam, LPARAM lParam) {
int x = (int)wParam;
int y = (int)lParam;
// 或 MYDATA* p = (MYDATA*)lParam; ... delete p;
return 0;
}
系統訊息 (如 WM_PAINT, WM_SIZE) 的 wParam/lParam 含義由 Windows 定義,不可隨意改動,需查閱 MSDN 文件。
PostMessage 通常由接收端釋放,SendMessage 由發送端釋放 (因同步)。std::shared_ptr 或 COPYDATASTRUCT 跨進程傳遞。WM_USER~0x7FFF 供視窗類別私用,WM_APP~0xBFFF 供應用全域私用,避免衝突。