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

时间: 2024-10-09 02:29:40

Windows的三类消息的相关文章

WINDOWS特有的消息常量标识符

'========================================'WINDOWS特有的消息常量标识符'========================================Public Const WM_NULL = &H0&Public Const WM_CREATE = &H1& '应用程序创建一个窗口Public Const WM_DESTROY = &H2& '一个窗口被销毁Public Const WM_MOVE = &

winCE/Windows 应用程序消息提示框自动消失功能

近期在做winCE系统的扫描枪应用程序,遇到了一些问题,其中包括消失提示框在手持终端显示过小, 用户要求提示框提示几秒后自动关闭,Windows平台可以通过调用系统API以定时器的方式进行自动销毁. 不过在winCE上存在不同,由于winCE系统属于精简版的windows系统,所以在API上也是属于精简后的, Windows平台销毁消息框用user32.dll中的FindWindow和PostMessage完成,而winCE平台并没有 user32.dll,不过对应的API在coredll.dl

[转]windows控件消息和控件通知消息大全

本篇文章主要介绍了"windows控件消息和控件通知消息大全",主要涉及到windows控件消息和控件通知消息大全方面的内容,对于windows控件消息和控件通知消息大全感兴趣的同学可以参考一下. Edit Control Notification Codes EN_SETFOCUS EN_KILLFOCUS EN_CHANGE EN_UPDATE EN_ERRSPACE EN_MAXTEXT EN_HSCROLL EN_VSCROLL Edit Control Messages EM

深入windows的关机消息截获-从XP到Win7的变化(在XP中程序可以阻止关机,但是在Win7中程序无法阻止关机,可Block的时间从1秒调到了5秒) good

之前写了一个软件用于实验室的打卡提醒,其中一个重要的功能是在关机之前提醒当天晚上是否已经打卡.之前我是在WM_ENDSESSION中弹出一个模态对话框来提醒,在XP中基本工作正常,在Win7中大多数时候工作正常,但是有时候会出现不提醒现象.我想这中间是不是有什么玄机,Windows的关机方案从XP到Win7到底发生了什么变化,如何进行有效的截获Windows关机消息.对此,我搜寻了MSDN和网上论坛结合自己的测评给出一个完善的描述和解决方案,如果你有类似的需求,可以参考这篇文章. 在MSDN中对

windows的消息传递--消息盒子

使用delphi的消息机制可以方便操作后台,其中重要的就是sendmessage()函数.下面讲解一下这个函数 [delphi] view plain copy function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; 其中四个参数的含义和说明如下:1.hWnd:对象的句柄.希望将消息传送给哪个对象,就把该对象的句柄作为实参传送,在 VB 中可以简单地用“对象.hW

深入windows的关机消息截获-从XP到Win7的变化

之前写了一个软件用于实验室的打卡提醒,其中一个重要的功能是在关机之前提醒当天晚上是否已经打卡.之前我是在WM_ENDSESSION中弹出一个模态对话框来提醒,在XP中基本工作正常,在Win7中大多数时候工作正常,但是有时候会出现不提醒现象.我想这中间是不是有什么玄机,Windows的关机方案从XP到Win7到底发生了什么变化,如何进行有效的截获Windows关机消息.对此,我搜寻了MSDN和网上论坛结合自己的测评给出一个完善的描述和解决方案,如果你有类似的需求,可以参考这篇文章. 在MSDN中对

Windows phone Toast消息推送 学习笔记

简单介绍: Windows phone平台支持三种形式的推送通知: 1.Tile——也就是在Start屏幕程序平铺图标 2.Toast——创建一个显示在当前屏幕中的Toast弹出窗口 3.Raw——有应用程序自己来处理的通知:对于用户是透明的. 这三种推送的过程是相同的,都涉及到三方:Windows phone应用程序.基于云的通知服务(Notification Service,由微软提供).通知源. 推送通知的过程如下图所示: 顺序如下:1.具有消息推送功能的应用发出消息推送 2.向微软推送通

windows窗口和消息

在windows桌面程序中,最主要的概念就是窗口, 它是屏幕上一切可见的对象(如各种窗口,子窗口,控件窗口等)的统称. 用户借助键盘或鼠标与窗口进行交互.用户对窗口的输入以"消息"的形式传递给窗口,而窗口也借助消息来与其他窗口进行通信. 在windows消息运作过程中涉及到三个相关者:  <1>用户的输入(通过键盘或鼠标)    <2>被操作的窗口    <3>操作系统 首先,当用户对窗口进行输入(如改变窗口的尺寸,移动窗口等)时,操作系统会捕捉用户

关于windows操作系统之消息和消息队列

关于消息和消息队列 不像基于MS-DOS的应用程序,基于Windows的程序是事件驱动的.他们不做任何显示调用来获取输入.而是通过等待系统传递给他们. 系统为应用程序传递所有输入到程序中的不同窗口.每个窗口都有一个称为窗口过程的函数,用于处理所有到该窗口的输入.窗口处理过程处理输入,并将控制返回给系统. 如果一个顶层窗口停止响应消息超过两秒,系统将会认为该窗口为非响应状态.在这种情况下,系统将隐藏该窗口并用拥有同样Z顺序,位置,尺寸和可视化属性的ghost窗口替代该窗口.这种情况下,允许用户移动