windows訊息分類

2022-09-08 10:48:10 字數 1747 閱讀 6438

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

on_cbn_killfocus(, )

on_bn_doubleclicked( ,)

當使用者從選單選中乙個命令專案、當乙個控制項傳送通知訊息給去父視窗或者按下乙個快捷鍵將傳送 wm_command 訊息,並由oncommand函式完成訊息的路由,其函式宣告如下:

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執行緒有乙個執行緒訊息佇列。滑鼠 鍵盤事件由滑鼠或鍵盤驅動程式轉...