Visual C++中MFC消息的分类

Visual C++中MFC消息的分为三类:标准(窗口)消息、命令消息、控件消息。

1、标准(窗口)消息:窗口消息一般与窗口内部运作有关,如创建窗口,绘制窗口,销毁窗口,通常,消息是从系统发到窗口,或从窗口发到系统。发送函数SendMessage()或者PostMessage()。除WM_COMMAND之外,所有的以WM_开头的消息。从CWnd派生的类,都可以接受到这类消息。注意:标准消息并不需要我们指定处理函数名称,是默认的对应关系。 

宏名称 对应消息 消息处理函数 
ON_WM_CHAR WM_CHAR OnChar 
ON_WM_CLOSE WM_CLOSE OnClose 
ON_WM_CREATE WM_CREATE OnCreate 
ON_WM_DESTROY WM_DESTROY OnDestroy 
ON_WM_LBUTTONDO WNWM_LBUTTONDOWN OnLButtonDown 
ON_WM_LBUTTONUP WM_LBUTTONUP OnLButtonUp 
ON_WM_MOUSEMOVE WM_MOUSEMOVE OnMouseMove 
ON_WM_PAINTWM_PAINT OnPaint 

 

2、命令消息:命令消息通常与处理用户请求有关,当用户单击一个菜单或工具栏时,命令消息就产生了。并发送到能处理该消息的类或函数(如装载文本,保存选项等)这类消息都以WM_COMMAND呈现。在MFC中,通过菜单标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。从CCmdTarget派生的类,都可以接收到这类消息,其wParam 记录着该消息来自哪一个菜单项目。 

ON_COMMAND(IDM_ABOUT, OnAbout) 
ON_COMMAND(IDM_FILENEW, OnFileNew) 
ON_COMMAND(IDM_FILEOPEN, OnFileOpen) 
ON_COMMAND(IDM_FILESAVE, OnFileSave) 

 

3、控件消息:由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口通(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。从CCmdTarget派生的类都可以接收到这类消息。 

控件宏 消息处理函数 
Button ON_BN_CLICKED(<id>,<memberFxn>) memberFxn 
ComboBox ON_CBN_DBLCLK(<id>,<memberFxn>) memberFxn 
Edit ON_EN_SETFOCUS(<id>,<memberFxn>) memberFxn 
ListBox ON_LBN_DBLCLK(<id>,<memberFxn>) memberFxn 

CWnd是CCmdTarget的派生类,在MFC的单文档程序中的CMenuApp和CMenuDoc都是属于CCmdTarget的派生类而不包含CWnd类。 

MFC命令消息的路由:AfxWndProc(替换了窗口过程函数)->AfxCallWndProc->WindowProc->OnWnddMsg->(如果是命令消息则调用Oncommand;如果是通告消息则调用OnNotify)->OnCmdMsg 
标准消息和非标准消息的区分:标准消息:带有控制后 后续操作;非标准消息:只是简单提示。 

你可以在程序的许多类别之中设计「消息映像表格」(每一个类别只能拥有一个消息映像表格,但也可以没有),接收并处理消息。只要是 CWnd 衍生类别,就可以拦下任何 Windows 消息。与窗口无关的MFC 类别(例如 CDocument 和 CWinApp)如果也想处理消息,必须衍生自 CCmdTarget,并且只可能收到 WM_COMMAND 命令消息。

转载于:https://www.cnblogs.com/rainbow70626/p/8034932.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么配置了vsftpd.conf文件,用户还是可以访问上级目录?

因为选择的连接类型是 SFTP over SSH 所以访问的是 sftp服务器&#xff0c;sftp的配置文件中没对该用户限制根目录&#xff0c;所以可以访问上一级目录。但是&#xff0c;还是不可以写入了&#xff0c;除了该用户的目录文件&#xff0c;其他文件都是只读。 修改 /etc/ssh/sshd…

来呀,快活呀。iOS 超级码农群:538549344

特大喜讯&#xff1a; iOS开发的小伙伴们&#xff0c;咱们有群了 iOS 超级码农交流群&#xff1a; 538549344 建群源于最近好多人加我QQ交流技术问题&#xff0c;有时忙于工作无法及时回复&#xff0c;为了大家的问题能及时得到解答&#xff0c;还是建个群&#xff0c;群里很多…

jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第1部分

jpa jsf我们创建了这篇文章&#xff0c;将展示如何使用以下工具创建完整的Web应用程序&#xff1a;Tomcat7&#xff0c;带有Primefaces的JSF2&#xff08;Facelets和Libraries&#xff09;&#xff08;具有AutoComplete&#xff09;&#xff0c;JPA / Hibernate&#xff08;具有…

前端性能优化:Add Expires headers

合理设置 HTTP缓存 缓存的力量是强大的&#xff0c;恰当的缓存设置可以大大的减少 HTTP请求。 很少变化的图片资源可以直接通过 HTTP Header中的Expires设置一个很长的过期头 ;变化不频繁而又可能会变的资源可以使用 Last-Modifed来做请求验证。 &#xff08;1&#xff09;Apa…

错题

1. 本题考查String对象的声明和赋值方式。C#中没有new String() 这种方式来构造字符串。故选 AC 2. 在CSS中&#xff0c;控制列表样式的属性有&#xff1a;list-style-type&#xff0c;list-style-position&#xff0c;list-style-image&#xff0c;list-style equals比较的是像…

通过微调JVM Garbage Collector减少Java IDE滞后

有没有想过为什么Eclipse / Netbeans会一直暂停一段时间&#xff1f; 特别是在您想向亲爱的同事展示代码中的内容时&#xff1f; 感觉很尴尬和尴尬&#xff0c;不是吗&#xff1f; 我发现大多数时间由于垃圾收集器的执行而导致IDE暂停。 JVM设计中的微妙元素很少起作用&#x…

centos8部署nginx

Nginx 部署 1.创建 www用户&#xff0c; UID、GID 皆是 501&#xff0c;通过cat /etc/passwd&#xff0c;检查是否存在www用户 ~]# groupadd -g 501 www ~]# useradd -u 501 -g www www ~]# cat /etc/passwd 2.下载相应版本 ~]# wget http://nginx.org/download/nginx-1.16…

javascript-发布订阅模式

说明&#xff1a;本篇文章转载自小火柴的蓝色理想的一篇博文。原文地址&#xff1a;http://www.cnblogs.com/xiaohuochai/p/8031564.html 发布—订阅模式又叫观察者模式&#xff0c;它定义对象间的一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖…

centos8部署Django项目---后台运行

参考&#xff1a;https://www.cnblogs.com/yoyoketang/p/10220941.html 一、安装 pip install django创建项目 django-admin startproject mysite打开项目配置settings.py文件 cd mysite/mysitesettings.py文件&#xff08; DEBUG TrueALLOWED_HOSTS [127.0.0.1, localh…

python-列表list和元组tuple

list Python内置的一种数据类型是列表&#xff1a;list。list是一种有序的集合&#xff0c;可以随时添加和删除其中的元素。 比如&#xff0c;列出班里所有同学的名字&#xff0c;就可以用一个list表示&#xff1a; >>> classmates [Michael, Bob, Tracy] >>&g…

jsf表单验证_动态表单,JSF世界期待已久

jsf表单验证新的PrimeFaces扩展版本0.5.0带来了新的DynaForm组件。 通常&#xff0c;如果知道行/列的数量&#xff0c;元素的位置等&#xff0c;则可以通过h&#xff1a;panelGrid或p&#xff1a;panelGrid构建非常简单的表单。 静态表单是正确的。 但是&#xff0c;如果在运行…

转载黑客是如何黑到你手机的?绝对涨姿势,一位黑客的Wi-Fi入侵实录!

声明&#xff1a;这是一虚构的故事&#xff0c;因此对图片均进行了模糊化处理。内容整理自网络&#xff01; 故事的主人公小黑是一名从事IT相关工作的技术宅男。五一长假来临&#xff0c;宅在家中的他相当无聊&#xff0c;打开手机上的Wi-Fi模块&#xff0c;发现附近有将近10个…

linux安装pip

使用脚本安装和升级pip 要安装或升级pip&#xff0c;需要下载 get-pip.py. 地址&#xff1a;https://bootstrap.pypa.io/get-pip.py 然后运行以下命令 (需要管理员权限): $ wget https://bootstrap.pypa.io/get-pip.py $ python get-pip.py #查看pip版本 $ pip -V

我们如何意外地将Hibernate的JDBC流量增加了一倍

这篇文章描述了我最近使用Hibernate ORM的经验。 多年以来&#xff0c;该框架并没有让我感到惊讶&#xff0c;您可能会在使用它时遇到性能问题。 我以为我已经看完了&#xff0c;但是这次我又措手不及了。 该问题的基础是在对一个完全不相关的库进行故障排除时建立的&#xff…

html5——DOM扩展

元素获取 1、document.getElementsByClassName (class) 通过类名获取元素&#xff0c;以类数组形式存在。 2、document.querySelector(‘div’) 通过CSS选择器获取元素&#xff0c;符合匹配条件的第1个元素。 3、document.querySelectorAll(selector) 通过CSS选择器获取元素&am…

linux 系统安装mongodb数据库---方法1

参考&#xff1a;https://www.jianshu.com/p/994bc7b19b26 参考&#xff1a;https://blog.csdn.net/duan9015/article/details/106447942/ 1、制作 repo 文件 vim /etc/yum.repos.d/mongodb-org-4.2.repo[mongodb-org-4.2] nameMongoDB Repository baseurlhttps://repo.mongo…

JAVA递归实现全排列

全排列&#xff08;permutation&#xff09; 排列组合概念 排列&#xff0c;就是指从给定n个数的元素中取出指定m个数的元素&#xff0c;进行排序 组合&#xff0c;则是指从给定n个数的元素中仅仅取出指定m个数的元素&#xff0c;不考虑排序 全排列 以数字为例&#xff0c;全排…

centos8 linux部署node项目

1、域名解析到服务器 2、上传代码到项目目录 3、数据库&#xff1a; mongo use user user是数据库名 db.nfrc.insert({“name”:admin,“pawwsord”:“123456”}) nfrc集合名&#xff0c;相当于表名 db.nfrc.find() 数据行的id和项目中routes文件下index.js里面的id相一致 …

java云端部署_Jelastic Java云端平台

java云端部署谁在Jelastic背后&#xff1f; 那是我的第一个问题&#xff0c;因此我浏览了Jelastic网站。 回答此问题的最佳方法是查看“ Jelastic团队”部分。 创始人&#xff0c;顾问&#xff0c;特殊合作伙伴构成了一支真正的专业团队。 作为特殊的合作伙伴&#xff0c;您会…

注意点

1&#xff0c;流关闭&#xff0c;尽量不要在一个异常捕获里&#xff0c;那样一个关闭出现问题&#xff0c;下面的流不会再关闭。。。 2&#xff0c;ArrayList<String> list 可以加入null list.add(null);转载于:https://www.cnblogs.com/z2qfei/p/8056760.html