Windows的四类消息
Windows的三类消息
1、标准消息
宏名称 对映消息 消息处理函数(名称已由系统预设)
ON_WM_CHAR WM_CAHR OnChar
ON_WM_CLOSE WM_CLOSE OnClose
ON_WM_CREATE WM_CREATE OnCreate
ON_WM_DESTROY WM_DESTROY OnDestroy
ON_WM_LBUTTONDOWN WM_LBUTTONDOWN OnLButtonDown
ON_WM_LBUTTONUP WM_LBUTTONUP OnLButtonUp
ON_WM_MOUSEMOVE WM_MOUSEMOVE OnMouseMove
ON_WM_PAINT WM_PAINT OnPaint
...
如:键盘消息
键盘消息是应用程序中使用最频繁的消息之一,
当用户使用键盘对应用程序进行操作,就发送键盘消息。
一般来说,Visual C++中的键盘消息主要有如下3种。
WM_CHAR:该消息的处理函数OnChar()。
WM_KEYDOWN:用户按下一个非系统键。
WM_KEYUP:在非系统键被释放时产生。
如:鼠标消息
与键盘消息类似,鼠标消息也是Windows应用程序中使用最为频繁的消息之一。
一般来说,Windows应用程序中的鼠标消息主要有如下几种。
WM_MOUSEMOVE:用户将鼠标移进窗口或在窗口中移动。
WM_LBUTTONDOWN:用户按下左键。
WM_LBUTTONUP:用户释放左键。
WM_LBUTTONDBCLICK:用户双击左键。
WM_RBUTTONDOWN:用户按下右键。
WM_RBUTTONUP:用户释放右键。
WM_RBUTTONDBCLICK:用户双击右键。
如:窗口消息
窗口消息是指对Windows应用程序的窗口进行某些操作时发送的消息。
Visual C++ 6.0中,包含了如下6种窗口消息。
WM_CREATE:窗口被创建。
WM_DESTROY:窗口被销毁。
WM_CLOSE:窗口被关闭。
WM_MOVE:窗口发生移动。
WM_SIZE:窗口发生改变。
WM_PAINT:窗口发生重绘。
如:焦点消息
焦点消息是指当窗口中的某个对象得到焦点和失去焦点的时候,
对应窗口或对象触发的操作。一般来说,只有下面两种焦点消息。
WM_SETFOCUS:窗口得到焦点。
WM_KILLFOCUS:窗口失去焦点。
当一个窗口从非活动状态变为具有输入焦点的活动状态的时候,
它就会收到WM_SETFOCUS消息,
而当一个窗口失去输入焦点变为非活动状态的时候它就会收到WM_KILLFOCUS消息。
如:定时器消息
Windows的定时器是一种周期性消息产生装置,
当用户为一个窗口设置了定时器资源之后,系统就会按
规定的时间间隔向窗口发送定时器消息,在这个消息中
就可以处理一些需要定期处理的事情
。定时器消息只有一种:WM_TIMER,其响应函数是OnTimer。
对于定时器的操作,通常都会和函数SetTimer()配合使用。
在响应OnTimer函数之前,应先添加一个定时器对其进行触发,
如果没有建立定时器,系统是不会自己去触发OnTimer函数的,
SetTimer()函数的作用就是设置定时器 。
2、命令消息
命令消息(WM_COMMAND)的一般对映规则是:
ON_COMMAND(<id>,<memberFxn>)
例如:
ON_COMMAND(IDM_ABOUT,OnAbout)
3、控件通知消息
[Notification消息](由控制组件产生,例如BN_xxx)的对映机制的宏分为好几种
(因为控制组件本来就分为好几种),以下各举一例做代表
控制组件 宏名称 消息处理函数
Button ON_BN_CLICKED(<id>,<memberFxn>) memberFxn
ComboBox ON_CBN_DBLCLK(<id>,<memberFxn>) memberFxn
Edit ON_EN_SETFOCUS(<id>,<menberFxn>) memberFxn
ListBox ON_LBN_DBLCLK(<id>,<memberFxn>) memberFxn
各个消息处理函数均应以afx_msg void 为函数形式
消息映射及消息响应:
MFC采用消息映射(Message Map)机制取代C/C++语言中的switch-case结构来处理消息。
MFC消息映射机制包括一组消息映射宏。一条消息映射宏把一个Windows消息和其消息处
理函数联结起来。
在类的实现源文件中用
BEGIN_MESSAGE_MAP(derived class,base class)
和
END_MESSAGE_MAP()宏来定义消息映射。
在类定义的结尾用DECLARE_MESSAGE_MAP()宏来声明使用消息映射。
BEGIN_MESSAGE_MAP(theclass, baseclass)
//{{AFX_MSG_MAP(theclass)
ON_ . . . . . . // MFC预定义的消息映射宏
ON_MESSAGE(message , memberFxn)
// 用户自定义的消息映射宏
. . . . . .
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//注意:
特殊注解“//{{AFX_MSG_MAP”是ClassWizard类向导用于维护消息映射宏的标记,
用户不要删除注解轻易修改注解内的代码。
4、用户自定义消息
1.首先在为类实现文件中定义消息。
#define WM_MYMESSAGE WM_USER+100
2.在类中声明消息处理函数。
afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam)
3.在类的消息映射表中加入映射项。
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
4.在类上实现消息处理函数。
5.使用SendMessage函数或PostMessage发送消息
SendMessage(WM_MYMESSAGE,0L,0L);
Windows的四类消息的更多相关文章
- 深入解析Windows窗口创建和消息分发(三个核心问题:怎么将不同的窗口过程勾到一起,将不同的hwnd消息分发给对应的CWnd类去处理,CWnd如何简单有效的去处理消息,由浅入深,非常清楚) good
笔记:争取不用看下面的内容,只看自己的笔记,就能记住这个流程,就算明白了: _tWinMain-->AfxWinMain,它调用四个函数: -->AfxWinInit用于做一些框架的初始化 ...
- SetWinEventHook 事件钩子(有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动等)good
相信消息钩子大家听的比较多,消息钩子能够在应用程序处理系统消息之前将其截获,提前处理并可以决定是否继续将消息往下传送,有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动 ...
- windows系统操作类和演示程序(关机,关闭显示器,打开屏幕保护程序,打开光驱等)
/// <summary> /// 系统控制类,关机,关闭显示器,打开屏幕保存程序等 /// </summary> public class SystemPowerContro ...
- 眼见为实(2):介绍Windows的窗口、消息、子类化和超类化
眼见为实(2):介绍Windows的窗口.消息.子类化和超类化 这篇文章本来只是想介绍一下子类化和超类化这两个比较“生僻”的名词.为了叙述的完整性而讨论了Windows的窗口和消息,也简要讨论了进程和 ...
- TWinControl的消息覆盖函数大全(41个WM_函数和31个CM_函数,它的WndProc就处理鼠标(转发)、键盘(取消拖动)、焦点、和WM_NCHITTEST一共4类消息)
注意,这些函数只有Private一种形式(也就是不允许覆盖,但仍在动态表格中): 其中TWinControl对TControl有10个消息进行了覆盖(红色标记),其中有2个是WM_消息,8个是CM_消 ...
- 深入解析Windows窗体创建和消息分发
Windows GUI採用基于事件驱动的编程模型,其实差点儿全部的界面库都是这样做的.在纯粹的Window32 SDK编程时代.人们还能够搞懂整个Windows窗口创建和消息的流通过程.可是在如今各种 ...
- gRPC学习之四:实战四类服务方法
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- BGP的四类属性详解
BGP的四类属性 公认必遵(Well-known mandatory) 要求所有运行BGP协议的设备都必须能识别,且在更新消息中必须包含. Origin(起源) 属性 用来标识路由信息的来源. 如果路 ...
- test [ ] 四类
test可理解的表达式类型分为四类: 表达式判断 字符串比较 数字比较 文件比较 test xxx 可以简写成 [ xxx ] 的形式,注意两端的空格. 1)判 ...
随机推荐
- MySQL数据目录(data)迁移
因为系统分区的空间不足,添加了一块硬盘,挂载到/data目录下,把MySQL的数据目录(data)迁移过去. 1.停止MySQL服务: [root@zabbix mysql]# service mys ...
- Go语言系列(六)- 接口和反射
接口 1. 定义: Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. type example interface{ Method1(参数列表) 返 ...
- 【Sql Server】SQL SERVER 收缩日志
事务日志记录着在相关数据库上的操作,同时还存储数据库恢复(recovery)的相关信息. 收缩日志的原因有很多种,有些是考虑空间不足,有些则是应用程序限制导致的. 下面介绍的是在简单模式下,进行收缩操 ...
- 第二节:重写(new)、覆写(overwrite)、和重载(overload)
一. 重写 1. 关键字:new 2. 含义:子类继承父类中的普通方法,如果在子类中重写了一个和父类中完全相同的方法,子类中会报警告(问是否显式的隐藏父类的中的方法),如果在子类中的方法前加上new关 ...
- Regularity criteria for NSE 6: $u_3,\p_3u_1,\p_3u_2$
In [Zujin Zhang, Jinlu Li, Zheng-an Yao, A remark on the global regularity criterion for the 3D Navi ...
- Java部分概念理解
第1部分 方法 1.1 方法基本概念 1) 方法:用于封装一段特定功能代码,尽可能一个方法至只实现一个基本功能,相当于C语言中的函数: 2) 方法可以多次调用: 3) 避免代码冗余,便于维护,便于团队 ...
- 纯css美化下拉框、复选框以及单选框样式并用jquery获取到其被选中的val
具体样式如图所示: 注:获取val值时记得要先引入jquery库奥. 1.下拉框 css部分 #cargo_type_id{ font-size: 13px; border: solid 1px #b ...
- UE4 AR开发笔记
1.基础使用 ArToolKit:生成图片特征,可以用彩图.(图片先灰化) genTexData效准相机.由于有的相机照相有弧度. calib_camera 2.使用UE4ARPlugins做 ...
- Python mac安装mysqlclient的一个bug
这是一个来自mysql官方的bug,反正我是看不懂. shuais-MBP:wxapp dandyzhang$ pipenv install mysqlclient Installing mysqlc ...
- 新手入门django本地化服务
自动化安装 #更新依赖库 pip install --upgrade setuptools #安装指定的版本 pip install Django==2.0.4 文 ...