1. 程式人生 > >在VS 2010中如何使用Class Wizard新增訊息處理函式

在VS 2010中如何使用Class Wizard新增訊息處理函式

教科書和網上講MFC大多是基於VC++6.0,這裡講一下VS2010的MFC的訊息函式的新增。

VS 2010的MFC的類嚮導如下(通過專案-->類嚮導開啟):

一、訊息響應函式的新增(以單文件應用程式的選單項點選事件為例):

1.確定響應函式屬於哪個類,這裡屬於CAppView類。

2.找到物件ID,這裡是我們新增的選單項的ID。

3.選擇何種響應訊息,這裡選單項的響應訊息應為WM_COMMAND訊息。UPDATE_COMMAND_UI是介面需要重繪時由系統傳送。

4.新增訊息處理函式,點選“新增處理程式”即可。

5.編輯處理程式碼。

注:

若要刪除新增的訊息處理函式,直接在類嚮導中找到它並點選刪除即可,這樣相應的程式碼就被註釋了。類嚮導新增訊息處理函式其實做了三件事:

1.在處理訊息的類.h檔案中宣告訊息處理函式,如:

  afx_msg void On_Point();

2.在該類的CPP檔案中編輯實現程式碼;

3.建立對映。

      即 建立訊息和訊息函式的對應關係,在類的.h檔案中,有DECLARE_MESSAGE_MAP()的巨集,它宣告這個類含有訊息對映。然後在類的.CPP檔案中有

BEGIN_MESSAGE_MAP()

ON_COMMAND(ID_FILE_PRINT,&CView::OnFilePrint)

ON_MESSAGE(WM_MY_MESSAGE,&CMyAppView::OnMyMessage)

.................

END_MESSAGE_MAP()

在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之間就進行了訊息和訊息處理函式的對應關係的建立,根據訊息的型別,左邊是訊息的ID或者控制元件的ID,右邊均為處理函式。ON_COMMAND(命令訊息),ON_MESSAGE(可用於自定義訊息)表示不同的訊息型別。

所以,我們也可以通過手工加入東西來進行訊息函式的新增,這跟用類嚮導新增是一樣的。

若是自定義訊息則之前還需要有以下步驟:

1.定義訊息,如:

#define     WM_MYMESSAGE      (WM_USER+101)

這裡WM_USER也是一個巨集,其實就是一個數字而已,這樣的定義方法是為了防止訊息值重複。

2.何時傳送訊息,如果是系統定義好了的訊息,它會在合適的時候傳送訊息給處理函式,而使用者自定義的訊息則需要自己定義何時傳送。

傳送訊息有兩個函式:

sendmessage()   postmessage()

前者將訊息傳送給視窗處理函式,直到傳送的訊息被處理後才返回。後者直接將訊息傳送到訊息處理佇列就返回。

用法:

sendmessage(WM_MYMESSAGE);