一種程式系統用語。
ON_NOTIFY: 在MFC應用程式里處理 WM_NOTIFY 訊息
函式CWnd::OnNotify處理通告訊息。其默認實現是檢查通告訊息處理函式的訊息映射,然後調用。(checks the message map for notification handlers to call.)
一般說來,你不用重載OnNotify。你可以寫一個處理函式,然後在你自己的視窗類的訊息映射表里添加一個該函式的訊息映射入口。
ClassWizard,通過ClassWizard屬性頁或者WizardBar工具條,能夠創建ON_NOTIFY訊息映射入口,並且給您提供了一個處理函式的框架。
ON_NOTIFY 訊息映射宏的語法如下:
ON_NOTIFY( wNotifyCode, id, memberFxn )
斜體字的參數被替換為:
wNotifyCode
要被處理的通告訊息代碼,如 LVN_KEYDOWN。
id
傳送通告訊息的控制項ID。
memberFxn
通告訊息傳送後被調用的成員函式。
你的成員函式必須按照如下形式聲明:
afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );
斜體字參數為::
pNotifyStruct
指向通告訊息結構的指針,類型如上聲明。
result
指向函式返回之前要被設定結果值的變數指針。
代碼實例
現指定你要成員函式OnKeydownList1函去處理ID為IDC_LIST1的CListCtrl控制項的LVN_KEYDOWN訊息,你可以通過ClassWizard把下面的內容加入到你的訊息映射表里:
ON_NOTIFY( LVN_KEYDOWN, IDC_LIST1, OnKeydownList1 )
在上面的例子裡,ClassWizard提供的函式是:
void CMessageReflectionDlg::OnKeydownList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler
// code here
*pResult = 0;
}
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler
// code here
*pResult = 0;
}
ClassWizard自動生成合適類型的指針。你可以通過pNMHDR或者pLVKeyDow訪問通告訊息結構體。