Mfc資源消息的響應機制
Mfc消息的響應機制
Mfc中有很多資源,如圖標資源,菜單資源,工具欄資源等等;那么,資源是如何進行消息響應和消息映射的呢?
它們的流程是:
某種資源——對應的ID號——消息映射——響應函數的聲明與實現
下面我們以工具欄的資源響應為例:(多文檔的應用程序)
1. 在工具欄資源增加一個圖標(隨便畫一下),雙擊它,設置它的資源ID為:ID_MYICON
2. 在View類的.cpp文件中添加消息映射;
找到BEGIN_MESSAGE_MAP()與END_MESSAGE_MAP()
之間的代碼,添加消息映射語句
ON_COMMAND(ID_MYICON,OnMyicon)
其中,第一個參數是資源的ID號;第二個為消息響應的函數名,為了與MFC的習慣保持一致,我們將其命名為OnMyicon
3. 消息響應函數的聲明
在View類中增加成員函數afx_msg void OnMyicon();
4. 消息響應函數的實現
在View類的.cpp文件中實現OnMyicon()函數;
void CXXXXXView::OnMyicon()
{
MessageBox("消息映射成功!");
}
菜單資源的消息響應機制于此完全相同;
Windows操作系統中包括以下幾種消息:
1、標準Windows消息:這種消息以WM_打頭。
2、通知消息
通知消息是針對標準Windows控件的消息。
這些控件包括:按鈕(Button)、組合框(ComboBox)、編輯框(TextBox)、列表框(ListBox)、ListView控件、Treeview控件、工具條(Toolbar)、菜單(Menu)等。每種消息以不同的字符串打頭。(見附錄)
3、自定義消息 編程人員還可以自定義消息。
附錄:
從MSDN中,我們可以看查到很多的ON_開頭的宏,一下列舉其中一些示例
Map Entry
Function Prototype
ON_BN_CLICKED( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_BN_DISABLE( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_BN_DOUBLECLICKED( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_BN_HILITE( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_BN_PAINT( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_BN_UNHILITE( <id>, <memberFxn> )
afx_msg void memberFxn( );
Map Entry
Function Prototype
ON_CBN_CLOSEUP( <id>, <memberFxn> )
afx_msg void memberFxn( )
ON_CBN_DBLCLK( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_CBN_DROPDOWN( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_CBN_EDITCHANGE( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_CBN_EDITUPDATE( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_CBN_ERRSPACE( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_CBN_KILLFOCUS( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_CBN_SELCHANGE( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_CBN_SELENDCANCEL( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_CBN_SELENDOK( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_CBN_SETFOCUS( <id>, <memberFxn> )
afx_msg void memberFxn( );
Map Entry
Function Prototype
ON_EN_CHANGE( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_EN_ERRSPACE( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_EN_HSCROLL( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_EN_KILLFOCUS( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_EN_MAXTEXT( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_EN_SETFOCUS( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_EN_UPDATE( <id>, <memberFxn> )
afx_msg void memberFxn( );
ON_EN_VSCROLL( <id>, <memberFxn> )
afx_msg void memberFxn( );
等等………………………………(參看MSDN)
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成