Mfc資源訊息的響應機制

來源:互聯網
上載者:User

 

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_開頭的,一下列舉其中一些樣本

User Button Handlers(按鈕)

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( );

Combo Box Handlers(組合框)

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( );

Edit Control Handlers(編輯框)

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)

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.