消息处理2

附录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
下载

你可能感兴趣的:(消息处理2)