1
、消息处理和消息映射的概念
2 、消息种类
3 、常用消息
4 、消息处理函数
5 、消息映射
2 、消息种类
3 、常用消息
4 、消息处理函数
5 、消息映射
所有
windows
应用程序都是消息驱动的,消息处理是所有
windows
应用程序的核心部分。当用户单击鼠标或改变窗口大小时,都将给适当的窗口发送消息。每个消息都对应于某个特定的事件。
一、消息处理和消息映射的概念
1 、消息
消息主要指由用户操作而向应用程序发出的信息,也包括操作系统内部产生的消息。例如,单击鼠标左按钮, windows 将产 WM_LBUTTONDOWN 消息,而释放鼠标左按钮将产生 WM_LBUTTONUP 消息,按下键盘上的字母键,将产生 WM_CHAR 消息。
1 、消息
消息主要指由用户操作而向应用程序发出的信息,也包括操作系统内部产生的消息。例如,单击鼠标左按钮, windows 将产 WM_LBUTTONDOWN 消息,而释放鼠标左按钮将产生 WM_LBUTTONUP 消息,按下键盘上的字母键,将产生 WM_CHAR 消息。
2
、
windows
消息组成结构
windows 消息由消息号和参数组成:
消息号
windows 操作系统通过 32 整数标识一条 windows 消息,称为消息号。 windows 消息号具有三个特点:
(1) 唯一性
唯一性指对于 windows 操作系统中的每一条消息都有一个且只有一个消息号与它相对应。由于 windows 操作系统通过消息激活相应的过程,因此消息的标识必须是唯一的。
(2) 直观性
消息号在形式上表现为消息名,消息名往住直观地说明了消息的产生方式和类型,例如消息名 WM_LBUTTONDOWN 直观地表示了单击产生的消息。
(3) 可自定义性
windows 系统定义了一些消息号和消息名,程序员可以运用这些消息,也可以使用自已定义的窗口的消息。形式如下:
#define 消息名 消息号
注意,为了不与现有的 windows 系统消息相冲突,在消息号的定义中通常采用如下:
WM_USER+n WM_USER 是 windows 操作系统定义的用户消息起始值,程序员必须从该起始值后选取消息号,例如自定义消息名为 “MESSAGE_1” 和 “MESSAGE_2” ,可采用如下形式:
#define MESSAGE_1 WM_USER+1
#DEFINE MESSAGE_2 WM_USER+2
参 数
windows 的消息具有以下两个参数:
(1) 字参数 (wParam)
(2) 长参数 (lParam)
字参数和长参数都是 32 位整数,用于提供消息的附带消息,是消息传递过程中参数的载体。附加信息的消息号取决于消息号。
3 、消息处理
在 MFC 中,每个专门的处理函数旱单独处理每个消息。消息处理函数通常是某一类的成员函数,编写消息处理函数是编写框架应用程序的主要任务。
可以使用 ClassWizard 创建消息处事函数,然后从 Classwizard 直接跳到源文件消息处理函数,编写处理代码。
4 、消息映射
可以接收消息和命令的所有框架类都有自已的消息映射。框架利用消息映射把消息、命令与它们的处理函数链接起来。从 CCmdTarget 类派生的任何类都可以有消息映射。虽然叫作 “ 消息映射 ” ,但消息映射既可以处理消息,也可以处理命令。
windows 消息由消息号和参数组成:
消息号
windows 操作系统通过 32 整数标识一条 windows 消息,称为消息号。 windows 消息号具有三个特点:
(1) 唯一性
唯一性指对于 windows 操作系统中的每一条消息都有一个且只有一个消息号与它相对应。由于 windows 操作系统通过消息激活相应的过程,因此消息的标识必须是唯一的。
(2) 直观性
消息号在形式上表现为消息名,消息名往住直观地说明了消息的产生方式和类型,例如消息名 WM_LBUTTONDOWN 直观地表示了单击产生的消息。
(3) 可自定义性
windows 系统定义了一些消息号和消息名,程序员可以运用这些消息,也可以使用自已定义的窗口的消息。形式如下:
#define 消息名 消息号
注意,为了不与现有的 windows 系统消息相冲突,在消息号的定义中通常采用如下:
WM_USER+n WM_USER 是 windows 操作系统定义的用户消息起始值,程序员必须从该起始值后选取消息号,例如自定义消息名为 “MESSAGE_1” 和 “MESSAGE_2” ,可采用如下形式:
#define MESSAGE_1 WM_USER+1
#DEFINE MESSAGE_2 WM_USER+2
参 数
windows 的消息具有以下两个参数:
(1) 字参数 (wParam)
(2) 长参数 (lParam)
字参数和长参数都是 32 位整数,用于提供消息的附带消息,是消息传递过程中参数的载体。附加信息的消息号取决于消息号。
3 、消息处理
在 MFC 中,每个专门的处理函数旱单独处理每个消息。消息处理函数通常是某一类的成员函数,编写消息处理函数是编写框架应用程序的主要任务。
可以使用 ClassWizard 创建消息处事函数,然后从 Classwizard 直接跳到源文件消息处理函数,编写处理代码。
4 、消息映射
可以接收消息和命令的所有框架类都有自已的消息映射。框架利用消息映射把消息、命令与它们的处理函数链接起来。从 CCmdTarget 类派生的任何类都可以有消息映射。虽然叫作 “ 消息映射 ” ,但消息映射既可以处理消息,也可以处理命令。
二、消息种类
消息主要有三种类型,即 windows 消息,命令消息和控件通知。
按消息的产生可以分为四类:
*(1) 外界输入事件产生的消息
*(2)windows 系统向应用程序发出的消息
*(3) 应用程序之间发送的消息
*(4) 其他
根据产生消息的对象,可以进一步将消息分为以下几类:
*(1) 窗口管理消息
包括激活基本窗口操作的消息,如关闭、最大化等。
*(2) 初始化消息
应用程序、窗口、控件等对象初始化的消息。
* ( 3 )输入消息
包括键盘、鼠标、绘图仪等处部输入工具的输入消息。
* ( 4 )系统消息
windows 系统内部消息。
* ( 5 )剪贴板消息
操作剪贴板时产生的消息。
* ( 6 )系统信息消息
用于系统信息发送和处理的消息。
* ( 7 )控件处理消息
操作控件时产生的消息。
* ( 8 )控件通知消息
系统采用空件通知消息向控件发送消息。
* ( 9 )滚动条消息
操作滚动条时产生的消息
*(10) 非用户区消息
非用户区产生的消息
*(11)MDI 消息
用于多文档操作的消息
*(12)DDE 消息
用于动态数据交换的消息。
* ( 13 )应用程序自定义的消息等等。
1 、 windows 消息
除 WM_COMMAND 外,所有以 WM_ 开头的消息都是 windows 消息。 windows 消息由窗口和视图处理。这类消息通常含有用于确定如何对消息进行处理的一些参数。
2 、控件消息
控件通知包含从控件和其他子窗口传递给父窗口的 WM_COMMAND 通知消息。例如,当用户改变编辑控件中的文本时,编辑控件将发送给父窗(例如对话框)一条含有 EN_EXCHANGE 控件通知码的 WM_COMMAND 消息。窗口的消息处理函数将以适当的方式对通知消息作出响应,如获取编辑框中的文本等。
像其他标准 windows 消息一样,控件通知消息由窗口和视图进行处理。但是如果用户单击控件按钮时发出的 BN_CLICKED 控件通知消息将作为命令消息来处理。
3 、命令消息
命令消息包括来自用户界面对象的 WM_COMMAND 通知消息。菜单项、工具栏按钮和加速键都是可以产生命令的用户界面对象。每个这样的对象都有一个 ID 。通过给对象和命令分配给同一个 ID 可以把用户界面对象和命令联系起来。命令是被作为特殊的消息来处理的。
通常,命令 ID 是以其表示的用户界面对象的功能来命名的。例如, Edit 菜单中的 Copy 命令就可以用 ID_EDIT_COPY 来表示。 MFC 类库预定义了某些命令 ID (如 ID_EDIT_PASTE 和 ID_FILE_OPEN 等等)。其他命令 ID 则要编程人员自已定义,所有预定义命令 ID 的列表,参见 AFXRES.H 文件。
命令消息的处理和其他消息的处理不同。命令消息可以被更广泛的对象(如文档、文档模板、应用程序对象、窗口和视图等)处理。 windows 把命令发送给多个候选对象,称为命令目标。通常其中一个对象有针对该命令的处理函数。处理函数处理命令的方法和处理 windows 消息的方法是一样的。但调用机制不一样。
消息主要有三种类型,即 windows 消息,命令消息和控件通知。
按消息的产生可以分为四类:
*(1) 外界输入事件产生的消息
*(2)windows 系统向应用程序发出的消息
*(3) 应用程序之间发送的消息
*(4) 其他
根据产生消息的对象,可以进一步将消息分为以下几类:
*(1) 窗口管理消息
包括激活基本窗口操作的消息,如关闭、最大化等。
*(2) 初始化消息
应用程序、窗口、控件等对象初始化的消息。
* ( 3 )输入消息
包括键盘、鼠标、绘图仪等处部输入工具的输入消息。
* ( 4 )系统消息
windows 系统内部消息。
* ( 5 )剪贴板消息
操作剪贴板时产生的消息。
* ( 6 )系统信息消息
用于系统信息发送和处理的消息。
* ( 7 )控件处理消息
操作控件时产生的消息。
* ( 8 )控件通知消息
系统采用空件通知消息向控件发送消息。
* ( 9 )滚动条消息
操作滚动条时产生的消息
*(10) 非用户区消息
非用户区产生的消息
*(11)MDI 消息
用于多文档操作的消息
*(12)DDE 消息
用于动态数据交换的消息。
* ( 13 )应用程序自定义的消息等等。
1 、 windows 消息
除 WM_COMMAND 外,所有以 WM_ 开头的消息都是 windows 消息。 windows 消息由窗口和视图处理。这类消息通常含有用于确定如何对消息进行处理的一些参数。
2 、控件消息
控件通知包含从控件和其他子窗口传递给父窗口的 WM_COMMAND 通知消息。例如,当用户改变编辑控件中的文本时,编辑控件将发送给父窗(例如对话框)一条含有 EN_EXCHANGE 控件通知码的 WM_COMMAND 消息。窗口的消息处理函数将以适当的方式对通知消息作出响应,如获取编辑框中的文本等。
像其他标准 windows 消息一样,控件通知消息由窗口和视图进行处理。但是如果用户单击控件按钮时发出的 BN_CLICKED 控件通知消息将作为命令消息来处理。
3 、命令消息
命令消息包括来自用户界面对象的 WM_COMMAND 通知消息。菜单项、工具栏按钮和加速键都是可以产生命令的用户界面对象。每个这样的对象都有一个 ID 。通过给对象和命令分配给同一个 ID 可以把用户界面对象和命令联系起来。命令是被作为特殊的消息来处理的。
通常,命令 ID 是以其表示的用户界面对象的功能来命名的。例如, Edit 菜单中的 Copy 命令就可以用 ID_EDIT_COPY 来表示。 MFC 类库预定义了某些命令 ID (如 ID_EDIT_PASTE 和 ID_FILE_OPEN 等等)。其他命令 ID 则要编程人员自已定义,所有预定义命令 ID 的列表,参见 AFXRES.H 文件。
命令消息的处理和其他消息的处理不同。命令消息可以被更广泛的对象(如文档、文档模板、应用程序对象、窗口和视图等)处理。 windows 把命令发送给多个候选对象,称为命令目标。通常其中一个对象有针对该命令的处理函数。处理函数处理命令的方法和处理 windows 消息的方法是一样的。但调用机制不一样。
三、常用消息
windows 中一些常用的消息:
1 、 WM_LBUTTONDOWN
产生:单击。
参数:
wParam: 包含一个整数值,以标识鼠标键的按下状态。
鼠标的按下标识及说明
数值 说明
MK_LBUTTON 标识按下鼠标左键
MK_MBUTTON 标识按下鼠标中键
MK_RBUTTON 标识按下鼠标右键
lParam: 长参数 lParam 的低字位包含当前坐标的 x 坐标 , 在高字节包含当前坐标的 Y 坐标。
相似的消息有:
WM_LBUTTONUP
WM_RBUTTONDOWN
WM_RBUTTONUP
WM_LBUTTONDBLCLK
WM_RBUTTONDBLCLK
2 、 WM_KEYDOWN
产生 : 按下一个非系统键的时候产生该事件 , 系统键是指实现系统操作的组合键,例如, Alt 与某个功能键的组合以实现菜单操作等。
参数:
wParam: 按下键的虚拟键盘码,虚拟键码用来标识按下或者释放的是哪个键,例如功能键 F1 的虚拟键码在 windows.h 文件中定义为 VK_F1 。
lParam: 长参数中记录了按键的重复次数,扫描码、转移代码、先前键的状态等信息。
相似的消息有:
WM_KEYUP: 放开按下的非系统键时产生的事件。
3 、 WM_CHAR
产生:按一个非系统键时产生。
参数:
wParam: 所按下的键的 ASCII 码。
lParam: 长参数中记录了按键的重复次数,扫描码、转移代码、先前键的状态等信息。
4 、 WM_CREATE
产生:由 CreateWindow 函数发出,创建窗口。
参数:
wParam: 没用。
lParam: 包含一个指向 CREATESTRUCT 数据结构的指针,该结构是传递给 CreateWindow 函数的参数的副本。
5 、 WM_CLOSE
产生:当关闭当前窗口时产生。
参数:
wParam: 未用。
lParam: 未用。
6 、 WM_DESTROY
产生:当窗口要销毁时由 DestroyWindow 函数发出。
参数:
wParam: 没用到。
lParam: 没用到。
7 、 WM_QUIT
产生:退出应用程序时由 PostQuitMessage 函数发出。
参数:
wParam: 含有退出代码,退出代码标识应用程序退出运行时的有关信息。
lParam: 未用。
8 、 WM_COMMAND
产生:用户与窗口或控件交互时,控件向其窗口发送 WM_COMMAND 消息。该消息的 wParam 参数的低字节中包含子窗口 ( 控件 ) 的标识值 ID ,高字节中包含子窗口向父窗口发出的通知代码, lParam 参数中包含控件子窗口句柄。
9 、 WM_PAINT
用户改变窗口大小或拖动窗口,系统向应用程序发送 WM_PAINT 消息, WM_PAINT 消息调用 BeginPaint 函数。
windows 中一些常用的消息:
1 、 WM_LBUTTONDOWN
产生:单击。
参数:
wParam: 包含一个整数值,以标识鼠标键的按下状态。
鼠标的按下标识及说明
数值 说明
MK_LBUTTON 标识按下鼠标左键
MK_MBUTTON 标识按下鼠标中键
MK_RBUTTON 标识按下鼠标右键
lParam: 长参数 lParam 的低字位包含当前坐标的 x 坐标 , 在高字节包含当前坐标的 Y 坐标。
相似的消息有:
WM_LBUTTONUP
WM_RBUTTONDOWN
WM_RBUTTONUP
WM_LBUTTONDBLCLK
WM_RBUTTONDBLCLK
2 、 WM_KEYDOWN
产生 : 按下一个非系统键的时候产生该事件 , 系统键是指实现系统操作的组合键,例如, Alt 与某个功能键的组合以实现菜单操作等。
参数:
wParam: 按下键的虚拟键盘码,虚拟键码用来标识按下或者释放的是哪个键,例如功能键 F1 的虚拟键码在 windows.h 文件中定义为 VK_F1 。
lParam: 长参数中记录了按键的重复次数,扫描码、转移代码、先前键的状态等信息。
相似的消息有:
WM_KEYUP: 放开按下的非系统键时产生的事件。
3 、 WM_CHAR
产生:按一个非系统键时产生。
参数:
wParam: 所按下的键的 ASCII 码。
lParam: 长参数中记录了按键的重复次数,扫描码、转移代码、先前键的状态等信息。
4 、 WM_CREATE
产生:由 CreateWindow 函数发出,创建窗口。
参数:
wParam: 没用。
lParam: 包含一个指向 CREATESTRUCT 数据结构的指针,该结构是传递给 CreateWindow 函数的参数的副本。
5 、 WM_CLOSE
产生:当关闭当前窗口时产生。
参数:
wParam: 未用。
lParam: 未用。
6 、 WM_DESTROY
产生:当窗口要销毁时由 DestroyWindow 函数发出。
参数:
wParam: 没用到。
lParam: 没用到。
7 、 WM_QUIT
产生:退出应用程序时由 PostQuitMessage 函数发出。
参数:
wParam: 含有退出代码,退出代码标识应用程序退出运行时的有关信息。
lParam: 未用。
8 、 WM_COMMAND
产生:用户与窗口或控件交互时,控件向其窗口发送 WM_COMMAND 消息。该消息的 wParam 参数的低字节中包含子窗口 ( 控件 ) 的标识值 ID ,高字节中包含子窗口向父窗口发出的通知代码, lParam 参数中包含控件子窗口句柄。
9 、 WM_PAINT
用户改变窗口大小或拖动窗口,系统向应用程序发送 WM_PAINT 消息, WM_PAINT 消息调用 BeginPaint 函数。
四、消息处理函数
1 、 windows 消息和控件通知的处理函数
windows 消息和控件通知都是由派生于 CWnd 的窗口类对象处理的。它们包括 CFrameWnd 、 CMDIFrameWnd 、 CMDIChildWnd 、 CView 、 CDialog 以及从这些派生的用户自定义的类。这样的类对象封装了 windows 窗口句柄 HWND 。
windows 消息和控件通知都有默认的处理函数,这些函数在 CWnd 类中进行了预定义, MFC 类库以消息名为基础形成这些处理函数的名称,这些处理函数的名称都以前缀 "On" 开始。有的处理函数不带参数,有的则有几个参数;有的还有除 void 以外的返回值类型。 CWnd 中消息处理函数的说明都有 afx_msg 前缀。关键字 afx_msg 用于把处理函数和其他 CWnd 成员函数区分开来。例如,消息 WM_PAINT 的处理函数在 CWnd 中被声明成:
afx_msg void OnPaint();
windows 消息常见的有鼠标消息(如 WM_LBUTTONDOWN) 消息)、键盘字符消息( WM_CHAR 消息 ) 、键盘按键消息( WM_KEYDOWN )、窗口重画消息 WM_PAINT, 水平和垂直条滚动消息 WM_HSCROLL 和 WM_VSCROLL) 以及系统时钟消息 WM_TIMER 等。
2 、命令消息的处理函数
由于用户界面的对象是用户自已定义的,每个应用程序的用户界面对象千差万别,所以对用户界面对象的命令消息没有默认的处理函数。如果某条命令直接影响某个对象,则应该让这个对象来处理这条命令。例如 FILE 菜单上的 Open 命令当然与应用程序有关:应用程序打开一个特定的文档来响应该命令。报以, Open 命令的处理函数是应用程序类的一个成员函数。
把命令消息映射成处理函数时, ClassWizard 以命令 ID 来命名处理函数,可以接受、修改、或替换推荐使用的名字。例如, Edit 菜单项的 Cut 命令,对应 ID 就是 ID_EDIT_CUT, 处理函数被命名成:
afx_msg void OnEditCut();
此外,对于控件按钮的 BN_CLICKED 通知消息,其处理函数可以被命名为:
afx_msg void OnClickedUseAsDefault();
命令消息的处理函数没有参数值,也不返回值。
1 、 windows 消息和控件通知的处理函数
windows 消息和控件通知都是由派生于 CWnd 的窗口类对象处理的。它们包括 CFrameWnd 、 CMDIFrameWnd 、 CMDIChildWnd 、 CView 、 CDialog 以及从这些派生的用户自定义的类。这样的类对象封装了 windows 窗口句柄 HWND 。
windows 消息和控件通知都有默认的处理函数,这些函数在 CWnd 类中进行了预定义, MFC 类库以消息名为基础形成这些处理函数的名称,这些处理函数的名称都以前缀 "On" 开始。有的处理函数不带参数,有的则有几个参数;有的还有除 void 以外的返回值类型。 CWnd 中消息处理函数的说明都有 afx_msg 前缀。关键字 afx_msg 用于把处理函数和其他 CWnd 成员函数区分开来。例如,消息 WM_PAINT 的处理函数在 CWnd 中被声明成:
afx_msg void OnPaint();
windows 消息常见的有鼠标消息(如 WM_LBUTTONDOWN) 消息)、键盘字符消息( WM_CHAR 消息 ) 、键盘按键消息( WM_KEYDOWN )、窗口重画消息 WM_PAINT, 水平和垂直条滚动消息 WM_HSCROLL 和 WM_VSCROLL) 以及系统时钟消息 WM_TIMER 等。
2 、命令消息的处理函数
由于用户界面的对象是用户自已定义的,每个应用程序的用户界面对象千差万别,所以对用户界面对象的命令消息没有默认的处理函数。如果某条命令直接影响某个对象,则应该让这个对象来处理这条命令。例如 FILE 菜单上的 Open 命令当然与应用程序有关:应用程序打开一个特定的文档来响应该命令。报以, Open 命令的处理函数是应用程序类的一个成员函数。
把命令消息映射成处理函数时, ClassWizard 以命令 ID 来命名处理函数,可以接受、修改、或替换推荐使用的名字。例如, Edit 菜单项的 Cut 命令,对应 ID 就是 ID_EDIT_CUT, 处理函数被命名成:
afx_msg void OnEditCut();
此外,对于控件按钮的 BN_CLICKED 通知消息,其处理函数可以被命名为:
afx_msg void OnClickedUseAsDefault();
命令消息的处理函数没有参数值,也不返回值。
五、消息映射
用 MFC Application Wizard 创建应用程序框架时, AppWizard 为创建的每个命令目标类(包括派生的应用程序对象、文档、视图、和边框窗口等)编写一个消息映射。每个命令目标类的消息映射存在相应的 .cpp 文件中。可以在 AppWizard 创建的基本消息映射的基础上,使用 ClassWizard 为每个类将处理的消息和命令添加一些条目。例如,对于应用程序类, MFC AppWizard 创建的基本消息映射为:
BEGIN_MESSAGE_MAP(CTextEditApp,CWinApp)
//{{AFX_MSG_MAP(CTextEditApp)
ON_COMMAND(ID_APP_ABOUT,OnAppAbout)
// 注: ClassWizard 将在此处添加和删除消息映射宏
// 不要编辑这些生成的代码块
//}}AFX_MSG_MAP
// 基于标准文件的文档命令(新建和打开)
ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen)
// 标准的打印设置命令
ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
1 、 WM_LBUTTONDOWN
产生:单击。
参数:
wParam: 包含一个整数值,以标识鼠标键的按下状态。
鼠标的按下标识及说明
数值 说明
MK_LBUTTON 标识按下鼠标左键
MK_MBUTTON 标识按下鼠标中键
MK_RBUTTON 标识按下鼠标右键
lParam: 长参数 lParam 的低字位包含当前坐标的 x 坐标 , 在高字节包含当前坐标的 Y 坐标。
相似的消息有:
WM_LBUTTONUP
WM_RBUTTONDOWN
WM_RBUTTONUP
WM_LBUTTONDBLCLK
WM_RBUTTONDBLCLK
2 、 WM_KEYDOWN
产生 : 按下一个非系统键的时候产生该事件 , 系统键是指实现系统操作的组合键,例如, Alt 与某个功能键的组合以实现菜单操作等。
参数:
wParam: 按下键的虚拟键盘码,虚拟键码用来标识按下或者释放的是哪个键,例如功能键 F1 的虚拟键码在 windows.h 文件中定义为 VK_F1 。
lParam: 长参数中记录了按键的重复次数,扫描码、转移代码、先前键的状态等信息。
相似的消息有:
WM_KEYUP: 放开按下的非系统键时产生的事件。
3 、 WM_CHAR
产生:按一个非系统键时产生。
参数:
wParam: 所按下的键的 ASCII 码。
lParam: 长参数中记录了按键的重复次数,扫描码、转移代码、先前键的状态等信息。
4 、 WM_CREATE
产生:由 CreateWindow 函数发出,创建窗口。
参数:
wParam: 没用。
lParam: 包含一个指向 CREATESTRUCT 数据结构的指针,该结构是传递给 CreateWindow 函数的参数的副本。
5 、 WM_CLOSE
产生:当关闭当前窗口时产生。
参数:
wParam: 未用。
lParam: 未用。
6 、 WM_DESTROY
产生:当窗口要销毁时由 DestroyWindow 函数发出。
参数:
wParam: 没用到。
lParam: 没用到。
7 、 WM_QUIT
产生:退出应用程序时由 PostQuitMessage 函数发出。
参数:
wParam: 含有退出代码,退出代码标识应用程序退出运行时的有关信息。
lParam: 未用。
8 、 WM_COMMAND
产生:用户与窗口或控件交互时,控件向其窗口发送 WM_COMMAND 消息。该消息的 wParam 参数的低字节中包含子窗口 ( 控件 ) 的标识值 ID ,高字节中包含子窗口向父窗口发出的通知代码, lParam 参数中包含控件子窗口句柄。
9 、 WM_PAINT
用户改变窗口大小或拖动窗口,系统向应用程序发送 WM_PAINT 消息, WM_PAINT 消息调用 BeginPaint 函数。
用 MFC Application Wizard 创建应用程序框架时, AppWizard 为创建的每个命令目标类(包括派生的应用程序对象、文档、视图、和边框窗口等)编写一个消息映射。每个命令目标类的消息映射存在相应的 .cpp 文件中。可以在 AppWizard 创建的基本消息映射的基础上,使用 ClassWizard 为每个类将处理的消息和命令添加一些条目。例如,对于应用程序类, MFC AppWizard 创建的基本消息映射为:
BEGIN_MESSAGE_MAP(CTextEditApp,CWinApp)
//{{AFX_MSG_MAP(CTextEditApp)
ON_COMMAND(ID_APP_ABOUT,OnAppAbout)
// 注: ClassWizard 将在此处添加和删除消息映射宏
// 不要编辑这些生成的代码块
//}}AFX_MSG_MAP
// 基于标准文件的文档命令(新建和打开)
ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen)
// 标准的打印设置命令
ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
1 、 WM_LBUTTONDOWN
产生:单击。
参数:
wParam: 包含一个整数值,以标识鼠标键的按下状态。
鼠标的按下标识及说明
数值 说明
MK_LBUTTON 标识按下鼠标左键
MK_MBUTTON 标识按下鼠标中键
MK_RBUTTON 标识按下鼠标右键
lParam: 长参数 lParam 的低字位包含当前坐标的 x 坐标 , 在高字节包含当前坐标的 Y 坐标。
相似的消息有:
WM_LBUTTONUP
WM_RBUTTONDOWN
WM_RBUTTONUP
WM_LBUTTONDBLCLK
WM_RBUTTONDBLCLK
2 、 WM_KEYDOWN
产生 : 按下一个非系统键的时候产生该事件 , 系统键是指实现系统操作的组合键,例如, Alt 与某个功能键的组合以实现菜单操作等。
参数:
wParam: 按下键的虚拟键盘码,虚拟键码用来标识按下或者释放的是哪个键,例如功能键 F1 的虚拟键码在 windows.h 文件中定义为 VK_F1 。
lParam: 长参数中记录了按键的重复次数,扫描码、转移代码、先前键的状态等信息。
相似的消息有:
WM_KEYUP: 放开按下的非系统键时产生的事件。
3 、 WM_CHAR
产生:按一个非系统键时产生。
参数:
wParam: 所按下的键的 ASCII 码。
lParam: 长参数中记录了按键的重复次数,扫描码、转移代码、先前键的状态等信息。
4 、 WM_CREATE
产生:由 CreateWindow 函数发出,创建窗口。
参数:
wParam: 没用。
lParam: 包含一个指向 CREATESTRUCT 数据结构的指针,该结构是传递给 CreateWindow 函数的参数的副本。
5 、 WM_CLOSE
产生:当关闭当前窗口时产生。
参数:
wParam: 未用。
lParam: 未用。
6 、 WM_DESTROY
产生:当窗口要销毁时由 DestroyWindow 函数发出。
参数:
wParam: 没用到。
lParam: 没用到。
7 、 WM_QUIT
产生:退出应用程序时由 PostQuitMessage 函数发出。
参数:
wParam: 含有退出代码,退出代码标识应用程序退出运行时的有关信息。
lParam: 未用。
8 、 WM_COMMAND
产生:用户与窗口或控件交互时,控件向其窗口发送 WM_COMMAND 消息。该消息的 wParam 参数的低字节中包含子窗口 ( 控件 ) 的标识值 ID ,高字节中包含子窗口向父窗口发出的通知代码, lParam 参数中包含控件子窗口句柄。
9 、 WM_PAINT
用户改变窗口大小或拖动窗口,系统向应用程序发送 WM_PAINT 消息, WM_PAINT 消息调用 BeginPaint 函数。