博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows的四类消息
阅读量:6692 次
发布时间:2019-06-25

本文共 2613 字,大约阅读时间需要 8 分钟。

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);

转载于:https://www.cnblogs.com/veis/p/6940015.html

你可能感兴趣的文章
CSS元素定位
查看>>
质量时代——“Jolt大奖精选丛书”有奖征文
查看>>
DNS服务器维护命令
查看>>
六、用户与权限
查看>>
面向机器学习数据平台的设计与搭建
查看>>
centos6.7 编译安装mysql-5.6.27
查看>>
spring cloud 整合zpkin问题
查看>>
Maven下载慢的解决方案
查看>>
我的友情链接
查看>>
Android 核心分析 之七------Service深入分析
查看>>
Regsvr32使用方法
查看>>
柱形图Demo
查看>>
编辑器
查看>>
关闭windows的默认共享
查看>>
react开发环境搭建
查看>>
数据库读写分离
查看>>
社交是微信营销
查看>>
2008 R2 证书服务器应用详解
查看>>
hive 动态分区太多问题
查看>>
Windows Server 2008 RemoteApp(二)---部署激活远程桌面授权服务器
查看>>