在 MFC/VC++ 開發中,通知消息 是控件向其父窗口發送的特定消息,用於報告控件狀態變化或用戶交互事件。常見例子包括按鈕點擊 (BN_CLICKED)、列表項選中 (LVN_ITEMCHANGED)、編輯框內容改變 (EN_CHANGE) 等。
並非所有通知消息都由系統發出。 雖然大多數標準控件通知(如 Common Controls)由系統自動發送,但開發者完全可以:
#define MY_NOTIFY (WM_USER + 100),在自定義控件中調用 GetParent()->SendMessage(MY_NOTIFY, ...) 發送。WM_COMMAND 或 WM_NOTIFY 以觸發現有處理邏輯。PostMessage 實現線程間安全通信。#define WM_MY_CUSTOM_NOTIFY (WM_APP + 1) // 使用 WM_APP 範圍避免衝突
void CMyCtrl::OnSomeEvent() {
NMHDR hdr;
hdr.hwndFrom = m_hWnd;
hdr.idFrom = GetDlgCtrlID();
hdr.code = WM_MY_CUSTOM_NOTIFY;
GetParent()->SendMessage(WM_NOTIFY, hdr.idFrom, (LPARAM)&hdr);
}
ON_NOTIFY(WM_MY_CUSTOM_NOTIFY, IDC_MY_CTRL, OnMyCustomNotify)
void CMyDialog::OnMyCustomNotify(NMHDR* pNMHDR, LRESULT* pResult) {
// 處理自定義通知
*pResult = 0;
}
BN_CLICKED、LVN_* 等),減少維護成本。WM_APP 範圍 (WM_APP 到 0xBFFF) 避免與系統消息衝突。NMHDR 結構傳遞控件標識,便於父窗口識別來源。VC++ 通知消息是控件與父窗口通信的標準機制。系統提供豐富的內建通知,開發者也可靈活定義專屬消息實現特定業務需求。掌握消息映射、NMHDR 結構及 WM_APP 範圍使用,能顯著提升 MFC 程序的擴展性與健壯性。