您的位置:首页 > 其它

ON_COMMAND和ON_MESSAGE的区别

2013-05-09 16:43 232 查看
在MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。

窗口消息(Window Message)一般与窗口的内部运作有关,如创建窗口、绘制窗口和销毁窗

口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。

若需要窗口消息的完全的列表,请参考M F C文档。

命令消息

命令消息一般与处理用户请求相关,当用户单击一个菜单项或工具栏时,命令消息产生,

并被发送到能处理该请求的类对象(如,装载文件、编辑文本和保存选项等)。

控件通知

通常,控件通知在某些重要事件发生时,由控件窗口发送到父窗口,如打开一个组合框。

控件通知为父窗口进一步控制子窗口提供了机会。例如,打开一个组合框时,父窗口可以用

组合框初建时得不到的消息填充它。

ON_COMMAND 和ON_MESSAGE都是将消息处理函数加入消息路由表中,但是ON_COMMAND对应的消息ID一直都是WM_COMMAND,而ON_MESSAGE的消息ID为ON_COMMAND的第一个参数

WM_COMMAND介绍和用法

WM_COMMAND产生的条件:点击菜单,点击加速键,点击子窗口按钮,点击工具栏按钮。这些时候都有command消息产生。

WM_COMMAND消息中有两个参数,wparam、lparam,定义如下:

wParam 高两个字节 通知码

wParam 低两字节 命令ID

lParam 发送命令消息的子窗体句柄。

对于菜单和加速键来说,lParam为0,只有控件此项才非0。命令ID也就是资源脚本中定义的菜单项的命令ID或者加速键的命令ID;菜单的通知码为0;加速键的通知码为1。

对于Windows菜单中菜单项和加速键,点击后,Windows会向所属的窗体发送WM_SYSCOMMAND,而不是WM_COMMAND消息。注意,WINDOWS菜单是系统菜单,也就是在标题栏点击鼠标左键的时候弹出的菜单。我们可以捕获WM_CREATE消息,加入自己的操作:GetSysMenu获取系统菜单句柄,然后对系统菜单进行操作,并且捕获添加菜单项(根据菜单命令ID)ID对应的WM_SYSCOMMAND消息进行处理。修改系统默认的菜单行为。

子窗体和父窗体:

子窗体被触发时,向父窗体发送一个WM_COMMAND消息,父窗体的窗口函数处理这个消息,进行相关的处理。lParam表示子窗口句柄,LOWORD(wParam)表示子窗口ID,HIWORD (wParam)表示通知码(例如单击,双击,SETFOCUS等)。

体验新版博客

转载自:http://dazuiyuloveapple.blog.sohu.com/144486474.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: