3.4 三種型別的訊息
在mfc應用程式中傳輸的訊息有三種型別:視窗訊息、命令訊息和控制項通知。
3.4.1 視窗訊息
視窗訊息(window message)一般與視窗的內部運作有關,如建立視窗、繪製視窗和銷毀窗
口等。通常,訊息是從系統傳送到視窗,或從視窗傳送到視窗。
當用sendmessage()或postmessage()傳送乙個視窗訊息時,變數message、wparam和
lparam的格式如下:
message wparam lparam
wm_*** 定義的命令 定義的命令
wm***可以是許多視窗訊息之一,如下列視窗:
■ wm_create,告訴視窗初始化自己。
■ wm_paint,告訴視窗繪製自己。
■ wm_mousemove,告訴視窗滑鼠移經它。
3.4.2 命令訊息
命令訊息一般與處理使用者請求相關,當使用者單擊乙個選單項或工具欄時,命令訊息產生,
並被傳送到能處理該請求的類物件(如,裝載檔案、編輯文字和儲存選項等)。
當用sendmessage( )或postmessage( )傳送視窗訊息時,變數message、wparam和lparam的
格式如下:
message wparam lparam
wm_command 0 command id 0
command id要麼是選中選單項的i d,要麼是被單擊的工具欄按鈕。注意command id不
能大於乙個字長,如果使它大於乙個字長,系統就只用0來填充高位字。某些控制項通知也用
wm_command訊息,區別兩種訊息的唯一方法是lparam是否為n u l l。
3.4.3 控制項通知
通常,控制項通知在某些重要事件發生時,由控制項視窗傳送到父視窗,如開啟乙個組合框。
控制項通知為父視窗進一步控制子視窗提供了機會。例如,開啟乙個組合框時,父視窗可以用
組合框初建時得不到的訊息填充它。
控制項通知經歷了乙個演變過程,因而sendmessage( )的變數message、wparam和lparam有
三種格式。
1. 第一控制項通知格式
第一控制項通知格式只是視窗訊息的子集。
message wparam lparam
wm_*** 定義的命令 定義的命令
wm_***可以是下面訊息中的任何一種:
■ wm_parentnotify表示乙個控制項視窗要麼已被建立或銷毀,要麼滑鼠已單擊了該視窗。
■ wm_ctlcolor、wm_drawitem、wm_measureitem、wm_deleteitem、wm_chartoitem、wm_vkeytoitem或wm_compareitem都是送往父視窗的訊息,用來繪製自身的控制項視窗。
■ wm_hscroll或wm_vscroll由滾動條控制項傳送,通知父視窗滾動視窗。
2. 第二控制項通知格式
第二控制項通知格式使用wm_command訊息,與命令訊息共享。
message wparam lparam
wm_command xn_*** 控制項id 視窗控制代碼
lparam變數用來區分是命令訊息還是控制項通知。控制項通知在lparam中有乙個有定義的控制代碼,用來標識發出通知的控制項;而命令訊息中lpram為n u l l。xn_***值因發出通知的控制項不同而不同,例如,xn_***值為en_change,告訴父視窗顯示在編輯框控制項中的文字已發生變化。還有其他一些例子列在附錄b中。
3. 第三控制項通知格式
第三控制項通知格式也是最靈活的通知格式,它用w m n o t i f y訊息。
message wparam lparam
wm_notify 控制項id 指向nmhdr的指標
lparam值指向乙個結構,該結構包括有關製作該通知的控制項的任何內容,而不受空間和型別的限制,該結構叫做nmhdr。
typedef struct tagnmhdr nmhdr;
nmhdr代表通知訊息頭(notification message header)。為什麼要這個頭?因為某些控制項用nmhdr作為頭髮送乙個更大結構的訊息,即使那些不知道更大結構內容的函式還是能處理通知頭。
vc 訊息對映之訊息種類
在windows中應用程式有三種訊息 視窗訊息,命令訊息,控制項訊息。1 視窗訊息 一般和視窗內部運作有關,如建立視窗,繪製視窗,銷毀視窗,通常,訊息是從系統發到視窗,或從視窗發到系統。傳送函式sendmessage 或postmessage 包涵的三個變數解釋如下 message wm wpara...
VC 中的訊息處理
messagebox 並沒有什麼多少功能,但是能夠在螢幕上顯示乙個視窗,提出乙個問題,並且等候使用者的輸入。下面是messagebox 的原型 int messagebox hwnd hwn,handle of owner window lpctstr lptext,address of text ...
關於c 中的訊息處理函式和vc中的訊息處理函式區別
從vc入門程式設計的,相信大家都很熟悉pretranslatemessage和windowproc兩個函式,前者是預處理windows發給控制項的訊息,後者是處理剩餘的控制項訊息。對於pretranslatemessage函式,一般來說,我們是這樣處理控制項訊息的 bool test pretran...