附錄B 訊息、控制項通知和訊息映像宏
B.1 一些通用視窗訊息
W M命令描述參數說明
W M C R E AT E 發發送此訊息,告訴視窗初始化自己發l P a r a m指向C R E AT E S T R U C T,它包含
C r e a t e Window ( ) 參數;初始化成功時
應返回0
W M I N I T D I A L O G 發發送此訊息,告訴對話方塊初始化自己; 發w P a r a m是接收初始焦點的控制項視窗的
在W M C R E AT E訊息之後以及在所有對控制代碼,l P a r a m是被CreateDialogParam ( )
話框中的控制項被建立後發送傳遞的選擇性參數
W M G E T M I N M A X I N F O 發發送此訊息,告訴視窗即將被重調到窗發l P a r a m指向一個M I N M A X I N F O結構,
口必須保持的最大或最小尺寸它允許視窗設定它的最小和最大尺寸
W M S I Z E 發發送此訊息,告訴一個視窗已被重調大小發w P a r a m是一個標誌,用以區分視窗被
最大化、最小化還是只是被重調大小。
l P a r a m告訴新視窗的大小
W M PA I N T 發發送此訊息,告訴視窗繪製它的客戶區發w P a r a m是進行繪製的裝置環境
W M D E S T R O Y 發發送此訊息,告訴一個視窗重新分配全發w P a r a m和l P a r a m未被使用
局堆上的任何內容
W M N C C R E AT E 發發送此訊息,告訴一個視窗正初始化非發l P a r a m指向W M _ C R E AT E使用的相
客戶區同的C R E AT E S T R U C T結構
W M N C D E S T R O Y 發發送此訊息,告訴一個視窗非客戶區已發w P a r a m和l P a r a m未被使用
被銷毀
W M N C PA I N T 發發送此訊息,告訴一個視窗繪製它的非發w P a r a m擁有繪製地區的控制代碼,地區
客戶區在第4章中描述
W M E R A S E B K G N D 發發送此訊息,告訴一個視窗擦除背景發w P a r a m指定進行擦除的裝置環境(一個
繪製的和被填充的矩形)
W M S H O W W I N D O W 發發送此訊息,告訴視窗顯示或隱藏自己發如果w P a r a m非0,則視窗被顯示
W M E N A B L E 發發送此訊息,告訴一個視窗啟用或禁用發如果w P a r a m非0,則視窗已被啟用
自己
W M I N I T M E N U P O P U P 發發送此訊息,告訴視窗它的系統功能表或發w P a r a m擁有菜單對象的控制代碼,l P a r a m的
主菜單將被開啟低位字表示子功能表位置,如果l P a r a m的
高位字非0,則系統功能表將開啟
W M H E L P 發發送此訊息,告訴一個視窗F1鍵已被按下發l P a r a m包含一個H E L P I N F O結構的指標,
結構包含處理上下文相關的協助所需要
的資訊
W M M O U S E M O V E 發當滑鼠移到它的客戶區時被寄送到一個發w P a r a m指示是否有鍵盤的S h i f t - C t r l - A l t
視窗鍵被按下, l P a r a m指示相對於客戶區的
新的滑鼠游標位置
W M L B U T TO N D O W N 發滑鼠的左鍵在客戶區被按下時,被寄送發與W M M O U S E M O V E相同
到該視窗
W M L B U T TO N U P 發當滑鼠左鍵在視窗的客戶區被鬆開時, 發與W M M O U S E M O V E相同
被寄送到該視窗
(續)
W M命令描述參數說明
W M L B U T TO N D B L C L K 發當滑鼠左鍵在客戶區被雙擊時,被寄送發與W M M O U S E M O V E相同,但注意,
到該視窗沒有C S _ D B L C L K S視窗類別風格的視窗
不接受該視窗訊息
W M R B U T TO N D O W N 發與W M L B U T TO N D B L C L K相同,但這發與W M M O U S E M O V E相同,但這裡是
W M R B U T TO N U P 發裡是滑鼠右鍵發滑鼠右鍵
W M R B U T TO N D B L C L K
W M K E Y D O W N 發當一個按鍵被按下時,被寄送到擁有鍵發w P a r a m包含虛擬鍵控代碼, l P a r a m包
盤焦點的視窗—除了A l t鍵被按下而C t r l 發含附加鍵資料
鍵沒被按下的情況
W M K E Y U P 發當一個按鍵被釋放時,被寄送到擁有鍵發與W M K E Y D O W N相同
盤焦點的視窗—除了A l t鍵被按下而C t r l
鍵沒被按下的情況
W M C H A R 發在W M K E Y D O W N訊息被翻譯成一個按發w P a r a m包含該字元,l P a r a m與W M _ K E Y-
鍵字元時,被寄送到該視窗D O W N相同
B.2 控制項通知執行個體
B.2.1 WM_XXX控制項通知
控制項視窗發送的通知
通所有被建立的沒有W S E X N O PA - 通當一個控鍵或任何一個子視窗被建立或被銷毀或被單擊時,發送W M
R E N T N O T I F Y視窗風格的子視窗_ PA R E N T N O T I F Y通知以告訴父視窗
通按鈕、組合框、列表框通W M _ C T L C O L O R、W M _ D R AW I T E M、W M _ M E A S U R E I T E M、
W M _ D E L E T E I T E M、W M _ C H A RTO I T E M、W M _ V K E Y TO I T E M和
W M C O M PA R E I T E M通知被發送到父視窗,以告訴在哪裡繪製控制項
滾捲軸通知是W M H S C R O L L、W M V S C R O L L
B.2.2 WM_COMMAND控制項通知
控制項視窗發送的通知
靜態通通知包括: S T N C L I C K E D、S T N D B L C L K、S T N E N A B L E、S T N D I S A B L E
按鈕通通知包括: B N C L I C K E D、B N PA I N T、B N D I S A B L E、B N P U S H E D、B N U N P U S H E D、
B N D B L C L K、B N S E T F O C U S、B N K I L L F O C U S
編輯通通知包括: E N _ S E T F O C U S、E N _ K I L L F O C U S 、E N _ C H A N G E 、E N _ U P D AT E 、
E N E R R S PA C E、E N M A X T E X T、E N H S C R O L L、E N V S C R O L L
列表框通通知包括: L B N S E L C H A N G E、L B N D B L C L K、L B N S E L C A N C E L、L B N S E T F O C U S、
L B N K I L L F O C U S
組合框通通知包括: C B N S E L C H A N G E、C B N D B L C L K、C B N S E T F O C U S、C B N K I L L F O C U S、
C B N _ E D I T C H A N G E 、C B N _ E D I T U P D AT E 、C B N _ D R O P D O W N、C B N _ C L O S E U P、
C B N S E L E N D O K、C B N S E L E N D C A N C E L
324 第五部分附錄
下載
B.2.3 WM_NOTIFY控制項通知
控制項視窗發送的通知
動畫、進度指示滑塊指示只只提供:N M O U TO F M E M O RY
微調按鈕只提供:N M O U TO F M E M O RY和U D N D E LTA P O S。對於U D N D E LTA P O S通知,
N M H D R是指向N M U P D O W N結構的頭
選項卡只提供: N M _ O U TO F M E M O RY、T C N _ K E Y D O W N、T C N _ S E L C H A N G E、
T C N _ S E L C H A N G I N G 。當通知是T C N _ K E Y D O W N時, N M H D R 是指向
N M T C K E Y D O W N結構的頭
樹形視圖控制項只提供: T V N _ S E L C H A N G I N G、T V N _ S E L C H A N G E D、T V N _ G E T D I S P I N F O、
T V N _ S E T D I S P I N F O、T V N _ I T E M E X PA N D I N G、T V N _ I T E M E X PA N D E D、
T V N _ B E G I N D R A G 、T V N _ B E G I N R D R A G 、T V N _ D E L E T E I T E M 、
T V N B E G I N L A B E L E D I T、T V N E N D L A B E L E D I T
只還提供一般通知訊息: N M _ O U TO F M E M O RY、N M _ C L I C K、N M _ D B L C L K、
N M _ R E T U R N 、N M _ R C L I C K 、N M _ R D B L C L K 、N M _ S E T F O C U S 、
N M K I L L F O C U S、N M C U S TO M D R AW、N M H O V E R
只根據發送的通知, N M H D R結構可以是下面的結構之一: N M T V D I S P I N F O、
N M T V K E Y D O W N、N M T V C U S TO M D R AW
清單控制項只提供:LV N I T E M C H A N G I N G、LV N I T E M C H A N G E D、LV N I N S E RT I T E M、
LV N _ D E L E T E I T E M、LV N _ D E L E T E A L L I T E M S、LV N _ C O L U M N C L I C K、
LV N _ B E G I N D R A G 、LV N _ B E G I N R D R A G 、LV N _ O D C A C H E H I N T 、
LV N _ I T E M A C T I VAT E、LV N _ O D S TAT E C H A N G E D、LV N _ O D F I N D I T E M、
LV N _ B E G I N L A B E L E D I T、LV N _ E N D L A B E L E D I T、LV N _ G E T D I S P I N F O、
LV N S E T D I S P I N F O、LV N K E Y D O W N、LV N M A R Q U E E B E G I N
只還提供上面所列的通知訊息
只根據發送的通知, N M H D R結構可以是下面的結構之一: N M LV D I S P I N F O、
N M LV K E Y D O W N
B.2.4 同時具有WM_COMMAND和WM_NOTIFY控制項通知的控制項視窗
控制項視窗發送的通知
多資訊編輯輯W M N O T I F Y控制項通知: E N M S G F I LT E R、E N R E Q U E S T R E S I Z E、E N S E L C H A N G E、
E N _ D R O P F I L E S、E N _ P R O T E C T E D、E N _ C O R R E C T T E X T、E N _ S TO P N O U N D O、
E N _ I M E C H A N G E 、E N _ S AV E C L I P B O A R D 、E N _ O L E O P FA I L E D 、
E N O B J E C T P O S I T I O N S、E N L I N K、E N D R A G D R O P D O N E
B.3 視窗訊息的訊息映像宏
附錄B 訊息、控制項通知和訊息映像宏325
下載
宏
O N _ M E S S A G E ( W M _ X X X , H a n d l e r )
例如:
O N _ M E S S A G E ( W M _ C R E AT E , M y
H a n d l e r )
O N M E S S A G E ( W M PA I N T, M y H a n
d l e r )
O N W M X X X
例如:
O N W M C R E AT E ( )
O N W M D E S T R O Y ( )
說明
可可以處理任何視窗訊息,這裡的
W M _ X X X 是任何視窗訊息值,
H a n d l e r可以是任意名稱
可每一個標準視窗訊息都有屬於它
自己的宏,它沒有參數,並且它的
名字和使用基於它的W M X X X設計
訊息處理函數調用參數
可L R E S U LT Handler (WPA R A M
w P a r a m,L PARAM lParam)
可
OnXxx(message specific)(因為參數是
特定的訊息,最好讓Class Wi z a r d添
加這些宏到訊息映像中)
B.4 被映射的訊息
B.5 命令和通知訊息
宏說明訊息處理函數調用參數
ON_COMMAND(id, Handler) 該該宏使W M C O M M A N D訊息指Void Handler()
向處理函數,這裡的i d是命令i d
O N C O M M A N D R A N G E ( i d , 該除了允許訊息處理函數處理一個連Void Handler(UINT id)
idLast, Handler) 續範圍的命令I D外,與上面相同
326 第五部分附錄
下載
宏
W M C T L C O L O R R E F L E C T ( )
W M D R AW I T E M R E F L E C T ( )
W M M E A S U R E I T E M R E F L E C T ( )
W M D E L E T E I T E M R E F L E C T ( )
W M C H A RTO I T E M R E F L E C T ( )
W M V K E Y TO I T E M R E F L E C T ( )
W M C O M PA R E I T E M R E F L E C T ( )
W M H S C R O L L R E F L E C T ( )
W M V S C R O L L R E F L E C T ( )
W M PA R E N T N O T I F Y R E F L E C T ( )
O N _ C O N T R O L _ R E F L E C T ( n C o d e ,
H a n d l e r )
O N C O N T R O L R E F L E C T E X ( n C o d e ,
H a n d l e r )
O N N O T I F Y R E F L E C T ( n C o d e , H a n d l e r )
O N _ N O T I F Y _ R E F L E C T _ E X ( n C o d e ,
H a n d l e r )
說明
這這些宏允許控制項視窗處
理W M _ X X X類型的控制項
通知,這裡的通知被父窗
口映射到該控制項視窗
這
這該宏允許控制項視窗處理
W M _ C O M M A N D類型的
控制項通知,它們被父視窗
映射到該控制項視窗,這裡
的n C o d e是控制項通知代碼,
而H a n d l e r是所選擇的任
意名字
這除了訊息處理函數返回
一個布爾值外,與上面相
同,如果布爾值為T R U E,
則也允許父視窗處理該消
息
這該宏允許控制項視窗處理
W M N O T I F Y類型的控制項
通知,該通知被父視窗映
射到該控制項視窗,這裡的
n C o d e 是通知代碼,而
H a n d l e r是所選擇的任意
名字
這除了處理函數返回一個
布爾值外,與上面的相同。
如果傳回值為T R U E,則
允許父視窗處理該訊息
訊息處理函數調用參數
HBRUSH CtlColor(CDC*,UINT)
Void DrawItem(LPDRAW I T E M S T R U C T )
Void MeasureItem(LPMEASUREITEMSTRUCT)
Void DeleteItem(LPDELETEITEMSTRUCT)
int CharTo I t e m ( U I N T, UNIT)
int VkeyTo I t e m ( U I N T, UNIT)
int CompareItem(LPCOMPA R E I T E M S T R U C T )
void HScroll(UINT, UINT)
void VScroll(UINT, UINT)
void ParentNotify(UINT, LPA R A M )
Void Handler ( )
BOOL Handler ( )
Void Handler(NMHDR* pNotifyStruct,
L R E S U LT* result)
BOOL Handler(NMHDR* pNotifyStruct,
L R E S U LT* result)
(續)
宏說明訊息處理函數調用參數
ON_COMMAND_EX(id, Handler) 該與上面相同,但是現在處理函數BOOL Handler(UINT id)
可以返回一個布爾值,如果該值為
FA L S E,則允許OnCmdMsg ( )繼續
掃描訊息映像尋找另一個訊息處理
函數
ON_COMMAND_EX_RANGE(id 該除了I D是一個範圍以外,與上面BOOL Handler(UINT)
i d L a s t , H a n d l e r ) 相同
ON_CONTROL(nCode, id, Handler) 該該宏使W M _ C O M M A N D控制項通Void Handler()
知指向訊息處理函數
ON_CONTROL_RANGE(nCode, id, 該除了允許控制項I D是一個範圍外, Void Handler(UINT id)
idLast, Handler) 與上面相同
ON_XXX_XXXX(id, Handler)例如:
ON_BN_DOUBLECLICKED(id, 該每個WM_XXX控制項通知有它自己Void Handler()
H a n d l e r ) ; 特有的宏,它只是把n C o d e傳遞給
ON_CONTROL ( )
ON_NOTIFY(nCode, id, Handler) 該該宏使W M N O T I F Y控制項通知指Void Handler(NMHDR*, LRESULT *)
向處理函數
ON_NOTIFY_RANGE(nCode, id, 該除了允許控制項I D為一個範圍外, Void Handler(UINT id, NMHDR*,
idLast, Handler) 與上面相同L R E S U LT *)
ON_NOTIFY_EX(nCode, id, Handler) 該與上面相同,但是這裡處理函數BOOL Handler(UINT id, NMHDR*,
可以返回一個布爾值,如果該值為L R E S U LT *)
FAL S E,則允許OnCmdMsg ()繼續掃
描訊息映像以尋找另一個處理函數
ON_NOTIFY_EX_RANGE(nCode, 該除了允許I D為一個範圍外,與上BOOL Handler(UINT id, NMHDR*,
id, idLast, Handler) 面相同L R E S U LT *)
附錄B 訊息、控制項通知和訊息映像宏327
下載