關於在ATL中自定義訊息

2021-04-15 23:00:17 字數 1630 閱讀 9576

在atl中自定義訊息的機制與mfc類似,使用訊息對映。

訊息對映

為了確保我們能夠在cwindowimpl-derived class中處理windows訊息,atl從抽象基類cmessagemap中繼承。cmessagemap宣告乙個純虛函式—— processwindowmessage,整個類如下:

class atl_no_vtable cmessagemap  

;你的cwindowimpl-derived class中必須實現processwindowmessage函式,該函式在cwindowimpl基類cwindowimplbaset中被windowproc呼叫。如果processwindowmessage返回true,訊息已經被你的基類處理了,windowproc將不會進行預設訊息處理,如果返回false,windowproc就會進行預設訊息處理。

begin_msg_map(cmainframe)  

message_handler(wm_destroy,   ondestroy)  

end_msg_map()    

訊息處理者將處理訊息或者失敗,導致預設處理。在處理函式被呼叫之前,控制代碼引數被預設置為true。處理函式返回且processwindowmessage退出後,你能夠手動將它設定為false( as ondestroy does)來允許預設處理。

針對標準windows訊息、wm_notify訊息和wm_command訊息,atl有很多訊息處理巨集供選擇,基本巨集型別有message_handler、notify_handler和command_handler。訊息佇列用相應的巨集來處理,比如:message_range_handler、notify_range_handler和command_range_handler。最簡單的增加訊息對映處理的方法是在類上面單擊右鍵,從彈出選單上選擇新增windows訊息處理,vc則會插入正確的訊息巨集。你不能使用類嚮導新增atl訊息對映處理。下面是有用的訊息處理巨集的概要:

message_handler對映乙個標準windows訊息到乙個處理函式。  

message_range_handler對映一批標準windows訊息到乙個處理函式。

command_handler對映乙個wm_command訊息到乙個處理函式,比如通知訊息、選單訊息、控制項訊息或者加速鍵訊息。  

command_id_handler對映一批wm_command訊息到乙個處理函式,比如通知訊息、選單訊息、控制項訊息或者加速鍵訊息。  

command_code_handler對映乙個wm_command通知訊息到乙個處理函式。  

command_range_handler對映一批wm_command通知訊息到乙個處理函式,比如通知訊息、選單訊息、控制項訊息或者加速鍵訊息。    

notify_handler對映乙個wm_notify訊息到乙個處理函式,比如:通知訊息、控制項標識。    notify_id_handler對映一批wm_notify訊息到乙個處理函式,比如:通知訊息、控制項標識。  

notify_code_handler 對映乙個wm_notify訊息到乙個處理函式,比如:通知訊息。

notify_range_handler對映一批wm_notify訊息到乙個處理函式,比如:控制項訊息。

更多技術文章請參看施昌權的個人**: http://www.joyvc.cn

在MFC中自定義訊息

首先弄清楚兩點 1 誰要傳送這個訊息 2 誰要接受這個訊息。用乙個簡單的例子來說明。物件a向b 也可以就是a到a 傳送訊息。1 傳送訊息 首先在a的標頭檔案中定義這個訊息 define wm usermessage wm user 30 所有自定義訊息都是以wm user訊息為基礎加上乙個任意的自然...

在VC中 新增響應自定義訊息

其中訊息定義可以放在stdafx.h 檔案中。1.首先定義乙個訊息 define wm debug wm user 1999 2.在視窗標頭檔案中新增 class cstreamserverdlg public cdialog afx msg afx msg void ondebug wparam ...

在VC中 新增響應自定義訊息

其中訊息定義可以放在stdafx.h 檔案中。1.首先定義乙個訊息 define wm debug wm user 1999 2.在視窗標頭檔案中新增 class cstreamserverdlg public cdialog afx msg afx msg void ondebug wparam ...