在windows中應用程式有三種訊息:視窗訊息,命令訊息,控制項訊息。
1、視窗訊息
一般和視窗內部運作有關,如建立視窗,繪製視窗,銷毀視窗,通常,訊息是從系統發到視窗,或從視窗發到系統。傳送函式sendmessage()或postmessage()。包涵的三個變數解釋如下:
message————-wm_***
wparam—————定義的命令
lparam—————-定義的命令
wm_***能夠是許多視窗訊息之一,如下列訊息:
wm_creat:告訴視窗初始化自己。
wm_paint: 告訴視窗繪製自己。
wm_mousemove:告訴視窗滑鼠移經他。
當然更有好多,看msdn吧~~~~
2 、命令訊息
命令訊息通常和處理使用者請求有關,當使用者單擊乙個選單或工具欄時,命令訊息就產生了。併發送到能處理該訊息的類或函式(如裝載文字,儲存選項等)。
當用sendmessage(),postmessage()傳送命令訊息時,變數message,wparam,lparam的格式如下:
message————–wm_command
wparam—————-0或commandid
iparam—————–0
commandid要麼時選中的選單項的id,要麼是被單擊的工具欄按鈕id,主意commandid不能大於乙個字長,系統就只用零來填寫高位。某些控制項也傳送wm_command訊息,區別兩種訊息的唯一的方法是看lparam是否為null。
3、控制項通知訊息
通常控制項通知訊息是有重要的事情發生,有控制項視窗傳送到父視窗的意種訊息。如開啟乙個組合框。控制項通知父視窗為進一步控制子視窗提供了機會。例如,開啟乙個組合框,父視窗能夠用組合框開始建立時得不到的訊息填充他。
控制項通知經歷了乙個演變過程。因而sendmessage()的變數message,lparam,wparam有三種格式如下:
(1) 第一種控制項通知訊息格式
第一種控制項通知訊息格式只能時視窗訊息的子集。
message————–wm_***
wparam—————-定義的命令
iparam—————–定義的命令
wm_***能夠是以下訊息中的任意一種:
wm_parentnotify :表明乙個控制項視窗要麼被建立或銷毀,要麼滑鼠已單擊了該視窗。
wm_ctlcolor, wm_drawitem, wm_measureitem, wm_deleteitem,wm_chartoitem, wm_compareitem都是發往父視窗的訊息,用來繪製自身控制項的視窗。
wm_hscroll, wm_vscroll由滾動條傳送,通知滾動視窗的父視窗。
(2) 第二中控制項通知訊息的格式
message————–wm_command
wparam—————-xn_***或控制項id
iparam—————–視窗控制代碼
iparam用來區分命令傳送訊息還是控制項(前邊我們說過了吧,呵)。
xn_*** 的值因傳送通知的控制項的不同而不同,例如當xn_***值為en_change時,告訴父視窗顯示在文字編輯框中的文字已發生了變化。
(3) 第三重控制項通知訊息格式
message————–wm_notify
wparam—————-控制項id
iparam—————–指向nmhdr的指標
iparam指向一種結構,該結構包括有關該通知控制項的任何內容,而不受空間和型別的限制,該架構就是nmhdr。
typedef struct tagnmhdr nmhdr;
nmhdr代表通知訊息頭,為什麼要這個頭?因為某些控制項用nmhdr作為頭髮送乙個更大的結構訊息,即使那些不知道更大結構內容的函式還是能處理通知頭。
VC訊息處理之訊息對映
訊息的傳遞與傳送是windows應用程式的核心所在,任何事件的觸發與響應均要通過訊息的作用才能得以完成。在sdk程式設計中,對訊息的獲取與分發主要是 通過訊息迴圈來完成的,而在mfc程式設計中則是通過採取訊息對映的方式對其進行處理的。相比而言,這樣的處理方式要簡單許多,這也是符合物件導向程式設計中盡...
VC訊息對映
vc訊息對映 2010年08月14日 視類增加乙個訊息相應函式後,在原始檔中都會增加三處 1 訊息相應函式原型。在cdrawview中會有這樣的 generated message map functions protected afx msg declare message map 在declar...
VC訊息對映
vc訊息對映 2010年08月14日 視類增加乙個訊息相應函式後,在原始檔中都會增加三處 1 訊息相應函式原型。在cdrawview中會有這樣的 generated message map functions protected afx msg declare message map 在declar...