[vc++][消息]C++中消息的种类

3.4 三种类型的消息
在MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。
3.4.1 窗口消息
窗口消息(Window Message)一般与窗口的内部运作有关,如创建窗口、绘制窗口和销毁窗
口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。
当用SendMessage()或PostMessage()发送一个窗口消息时,变量Message、wParam和
lParam的格式如下:
Message wParam lParam
WM_XXX 定义的命令 定义的命令

WMXXX可以是许多窗口消息之一,如下列窗口:
■ WM_CREATE,告诉窗口初始化自己。
■ WM_PAINT,告诉窗口绘制自己。
■ WM_MOUSEMOVE,告诉窗口鼠标移经它。
有关某些公共窗口消息,参见附录B。若需要窗口消息的完全的列表,请参考M F C文档。
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_XXX 定义的命令 定义的命令
WM_XXX可以是下面消息中的任何一种:
■ 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_XXX 控件ID 窗口句柄
lParam变量用来区分是命令消息还是控件通知。控件通知在lParam中有一个有定义的句柄,用来标识发出通知的控件;而命令消息中lPram为N U L L。XN_XXX值因发出通知的控件不同而不同,例如,XN_XXX值为EN_CHANGE,告诉父窗口显示在编辑框控件中的文本已发生变化。还有其他一些例子列在附录B中。
3. 第三控件通知格式
第三控件通知格式也是最灵活的通知格式,它用W M N O T I F Y消息。
Message wParam lParam
WM_NOTIFY 控件ID 指向NMHDR的指针
lParam值指向一个结构,该结构包括有关制作该通知的控件的任何内容,而不受空间和类型的限制,该结构叫做NMHDR。
typedef struct tagNMHDR {
HWND hwndFrom; // Window handle of Control Window
// making the notification.
UINT idFrom; // Control ID of Control Window
// making the notification.
UINT code; // notification code ex: the user
// has clicked the Control Window
} NMHDR;
NMHDR代表通知消息头(Notification Message Header)。为什么要这个头?因为某些控件用NMHDR作为头发送一个更大结构的消息,即使那些不知道更大结构内容的函数还是能处理通知头。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值