vc 訊息 C 中訊息的種類

2021-08-31 15:19:25 字數 2045 閱讀 5171

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...