首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC 自定義訊息參數傳遞:WPARAM/LPARAM 傳遞座標或結構體指標

     編輯:程式設計疑難解答

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 跨進程傳遞。
  • 訊息 ID 範圍:WM_USER~0x7FFF 供視窗類別私用,WM_APP~0xBFFF 供應用全域私用,避免衝突。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved