windows中,訊息被分為以下三類:
第一類:標準訊息
除了wm_command之外,所有的wm_開頭的訊息都是標準訊息。從cwnd派生的類,都可以接收這類訊息。
例如wm_char、wm_close,其對應的訊息對映巨集分別是on_wm_char()、on_wm_close();
第二類:命令訊息
來自選單、加速鍵或工具欄按鈕的訊息。這類訊息都以wm_command形式呈現。在mfc中,通過選單項的id來區分不同的命令訊息,從ccmdtarget派生的類,都可以接收這類訊息,其訊息對映巨集形式如下:
on_command(id_file_print, &cview::onfileprint)第三類:通告訊息on_command(id_file_print_direct, &cview::onfileprint)
on_command(id_file_print_preview, &cview::onfileprintpreview)
由控制項產生的訊息,例如按鈕的單擊、列表框的選擇等都會產生這類訊息,目的是為了向其父視窗(通常是對話方塊)通知事件的產生。這類訊息也是以wm_command形式呈現的。從ccmdtarget派生的類,都可以接收這類訊息。
通告訊息的命名規律:
列表框:lbn_****
組合框:cbn_****
tab框:tbn_****
按鈕 : bn_****
edit : en_****
其訊息對映巨集形式如下:
on_lbn_dblclk(, )當使用者從選單選中乙個命令專案、當乙個控制項傳送通知訊息給去父視窗或者按下乙個快捷鍵將傳送 wm_command 訊息,並由oncommand函式完成訊息的路由,其函式宣告如下:on_cbn_killfocus(, )
on_bn_doubleclicked( ,)
virtual bool oncommand(wparam wparam, lparam lparam);該函式的兩個引數,總結如下:
我們可以利用oncommand函式完成訊息的截獲:
我們在"選單命令訊息路由過程分析"中已經知道訊息的響應順序是:視類->文件類->框架類->應用程式類。
下面舉例給出框架類如何截獲視類的訊息響應過程:
第一步:新增視類訊息響應函式
我們在選單欄中新增"test"選單,並新增訊息響應函式,該訊息響應函式如下:
void cmenu2view::ontest()執行效果:
第二步:新增框架類的oncommand函式
我們利用mfc提供的嚮導在cmainframe中重寫oncommand函式,這時視類就不會再響應訊息了,其**如下:
bool cmainframe::oncommand(wparam wparam, lparam lparam)執行效果:return cframewnd::oncommand(wparam, lparam);
}
Windows訊息分類
windows訊息分為三類 標準訊息 除了wm command 之外,所有以 wm 開頭的訊息都是標準訊息,從 cwnd 派生的類都可以接受這類訊息。例如 在.h檔案中宣告的wm rbuttondown標準的訊息 afx msg declare message map 在.cpp檔案中宣告的wm r...
關於Windows訊息的分類和使用場景
在windows開發中,我們經常會使用的自定義訊息,關於這個訊息的數值選取,還是有點講究的,今天就來具體看看 免得又掉溝裡了 windows訊息,可以分為如下幾類 這類訊息是被作業系統定義並使用的訊息。我們盡量不要在這個範圍內定義我們自己的訊息,因為它們會被作業系統使用並識別訊息的wparam和lp...
訊息的分類
1.佇列訊息和非佇列訊息 從訊息的傳送途徑上看,訊息分為兩種 佇列訊息和非佇列訊息。佇列訊息送到系統訊息佇列,然後到執行緒訊息佇列 非佇列訊息直接送給目的視窗過程。這裡,對訊息佇列闡述如下 windows維護乙個系統訊息佇列,每個gui執行緒有乙個執行緒訊息佇列。滑鼠 鍵盤事件由滑鼠或鍵盤驅動程式轉...