首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 自定義訊息響應:四步驟完整實作指南

     編輯:VC 教學

標準流程

1. 定義訊息碼

#define WM_MYCUSTOM  (WM_USER + 1999)

WM_USER (0x0400) 以上為用戶自定義範圍,避免衝突。

2. 視窗類別頭文件聲明

class CMyDialog : public CDialog {
    // ...
    afx_msg void OnMyCustom(WPARAM wParam, LPARAM lParam);
    DECLARE_MESSAGE_MAP()
};

3. CPP 文件訊息映射與處理函數

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
    ON_MESSAGE(WM_MYCUSTOM, OnMyCustom)
END_MESSAGE_MAP()

void CMyDialog::OnMyCustom(WPARAM wParam, LPARAM lParam) {
    // wParam/lParam 攜帶自定義數據
    // 處理邏輯...
}

4. 發送訊息

// 非同步發送(推薦,不阻塞發送者)
pWnd->PostMessage(WM_MYCUSTOM, (WPARAM)pData, 0);

// 同步發送(需等待處理完成)
// pWnd->SendMessage(WM_MYCUSTOM, wParam, lParam);

關鍵差異:PostMessage vs SendMessage

特性PostMessageSendMessage
阻塞性非阻塞,投遞隊列即返回阻塞,直呼處理函數並等待返回
執行緒安全跨執行緒安全跨執行緒需謹慎(易死鎖)
適用場景通知、觸發、解耦需即時結果、同步操作

實戰技巧

  • 傳遞指標:wParam/lParam 傳 this 或結構體指標,接收端 reinterpret_cast 還原;
  • 跨模組通訊:DLL 與 EXE 共享 WM_MYCUSTOM 定義,建議放公共頭文件;
  • 避免衝突:大型專案用 WM_APP 為基礎(WM_APP + x),範圍更寬;
  • ClassWizard 不支援自定義訊息:需手寫三步驟(聲明、映射、實作)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved