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的四类消息的更多相关文章

  1. 深入解析Windows窗口创建和消息分发(三个核心问题:怎么将不同的窗口过程勾到一起,将不同的hwnd消息分发给对应的CWnd类去处理,CWnd如何简单有效的去处理消息,由浅入深,非常清楚) good

    笔记:争取不用看下面的内容,只看自己的笔记,就能记住这个流程,就算明白了: _tWinMain-->AfxWinMain,它调用四个函数: -->AfxWinInit用于做一些框架的初始化 ...

  2. SetWinEventHook 事件钩子(有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动等)good

    相信消息钩子大家听的比较多,消息钩子能够在应用程序处理系统消息之前将其截获,提前处理并可以决定是否继续将消息往下传送,有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动 ...

  3. windows系统操作类和演示程序(关机,关闭显示器,打开屏幕保护程序,打开光驱等)

    /// <summary> /// 系统控制类,关机,关闭显示器,打开屏幕保存程序等 /// </summary> public class SystemPowerContro ...

  4. 眼见为实(2):介绍Windows的窗口、消息、子类化和超类化

    眼见为实(2):介绍Windows的窗口.消息.子类化和超类化 这篇文章本来只是想介绍一下子类化和超类化这两个比较“生僻”的名词.为了叙述的完整性而讨论了Windows的窗口和消息,也简要讨论了进程和 ...

  5. TWinControl的消息覆盖函数大全(41个WM_函数和31个CM_函数,它的WndProc就处理鼠标(转发)、键盘(取消拖动)、焦点、和WM_NCHITTEST一共4类消息)

    注意,这些函数只有Private一种形式(也就是不允许覆盖,但仍在动态表格中): 其中TWinControl对TControl有10个消息进行了覆盖(红色标记),其中有2个是WM_消息,8个是CM_消 ...

  6. 深入解析Windows窗体创建和消息分发

    Windows GUI採用基于事件驱动的编程模型,其实差点儿全部的界面库都是这样做的.在纯粹的Window32 SDK编程时代.人们还能够搞懂整个Windows窗口创建和消息的流通过程.可是在如今各种 ...

  7. gRPC学习之四:实战四类服务方法

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. BGP的四类属性详解

    BGP的四类属性 公认必遵(Well-known mandatory) 要求所有运行BGP协议的设备都必须能识别,且在更新消息中必须包含. Origin(起源) 属性 用来标识路由信息的来源. 如果路 ...

  9. test [ ] 四类

    test可理解的表达式类型分为四类:     表达式判断     字符串比较     数字比较     文件比较 test xxx 可以简写成 [  xxx  ] 的形式,注意两端的空格.   1)判 ...

随机推荐

  1. 为什么要写 tf.Graph().as_default()

    首先,去tensorflow官网API上查询 tf.Graph() 会看到如下图所示的内容: 总体含义是说: tf.Graph() 表示实例化了一个类,一个用于 tensorflow 计算和表示用的数 ...

  2. Ubuntu16.04 安装g++6

    https://blog.csdn.net/qq_34877350/article/details/81182022 1.安装gcc-6: sudo apt-get update && ...

  3. Typora使用说明(记录总结)

    目录 区域元素 YAML FONT Matters 菜单 段落 标题 引注 序列 可选序列 代码块 数学块 表格 脚注 水平线 特征元素 链接 超链接 内链接 相关链 URLs 图片 斜体 加粗 删除 ...

  4. python之路(2)集合(set)和字符串格式化

    目录 集合(set) 字符串的格式化(%和format) 集合(set) {‘a’,'b','c','d','e'} 定义:有不同元素组成的集合,集合的元素为不可变类型(数字,字符串,元组),集合是一 ...

  5. 第十二节:Lambda、linq、SQL的相爱相杀(1)

    一. 谈情怀  Lambda.Linq.SQL伴随着我的开发一年又一年,但它们三者并没有此消彼长,各自占有这一定的比重,起着不可替代的作用. 相信我们最先接触的应该就是SQL了,凡是科班出身的人,大学 ...

  6. mvc 在弹出框中实现文件下载

    var myParent = parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent; ...

  7. gulp学习笔记——最好的学习文档是官网

    官网:http://www.gulpjs.com.cn/docs/api/ 当然还有一个博客写的也很好,当我看不下去官网的时候,这个帮助了我很多,明了易懂:http://www.ydcss.com/a ...

  8. ve2.0 v-for循环报错的解决方案

    <li v-for="(item,index) in mokeData" class="page" :key="index"> ...

  9. 让iframe自适应高度-真正解决

    需求:实现 iframe 的自适应高度,能够随着页面的长度自动的适应以免除页面和 iframe 同时出现滚动条的现象. (需要只有iframe出现滚动条) 本人一开始这么写:会造成只有主页面加载是设定 ...

  10. 51nod 1423 最大二“货” 单调栈

    利用单调栈,高效求出每个区间内的最大值和次大值的亦或值. 先正向扫描,利用单调递减栈,若当前栈为空栈,则直接压入栈中,若为非空栈,弹出栈顶元素,每弹出一个元素,则求一次亦或值,保留最大值 接着进行反向 ...