MFC 消息类型

本文介绍了MFC中消息的分类,包括窗口消息、命令消息和控件通知,详细阐述了各类消息的特性和应用场景,如WM_COMMAND用于处理用户请求,控件通知用于子窗口与父窗口的交互。同时,列举了不同消息对应的映射宏,如ON_COMMAND、ON_UPDATE_COMMAND_UI等,以及简单和复杂控件如何发送通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<一>消息的分类

1标准消息

 WM_COMMAND之外,所有以WM_开头的消息。例如WM_CHAR WM_CREATE消息。
  CWnd派生的类,都可以接收到这类消息。CWnd是从CCmdTarget派生而来的,所以CWnd也可以接受命令消息,也可以接受通告消息
n 2命令消息
来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。
CCmdTarget派生的类,都可以接收到这类消息。
n 3通告消息
 由控件产生的消息,例如,按钮的单击列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND式呈现。
CCmdTarget派生的类,都可以接收到这类消息。



MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。  

(1)窗口消息:WM_XXX

      窗口消息(Window Message)一般与窗口的内部运作有关,如:创建窗口、绘制窗口和销毁窗口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。  

(2)命令消息:WM_COMMAND

      命令消息一般与处理用户请求相关,当用户单击一个菜单项或工具栏时,命令消息产生,并被发送到能处理该请求的类对象(如:装载文件、编辑文本和保存选项等)。  

(3)控件通知:有多种格式
      通常,控件通知在某些重要事件发生时,由控件窗口发送到父窗口,如打开一个组合框。控件通知为父窗口进一步控制子窗口提供了机会。例如,打开一个组合框时,父窗口可以用组合框初建时得不到的消息填充它。  

      BN_XXXX是CButton产生的消息,EN_XXXX是CEdit产生的消息,等等。


MFC 消息类型:

按照消息的范围来分,可以分成四大类消息:

1)  系统消息                                     (0                     到WM_USER–1)

2)  窗口类内部自定义消息         (WM_USER   到WM_APP-1)

3)  应用程序内部自定义消息      (WM_APP      到0xBFFF)

4)  应用程序之间自定义消息      (0xC000                   到0xFFFF)

其中系统消息有可以分成三类: 窗口消息(WM_), 命令消息(WM_COMMAND), 控件通知消息(WM_NOTIFY)。

 

不同的消息使用不同的映射宏:

类型

消息

映射宏

映射函数类型

系统消息

窗口消息WM_

ON_WM_

不同的消息有不同的映射函数。

命令消息WM_COMMAND

ON_COMMAND/

ON_COMMAND_RANGE

Void OnXXX ()/

Void OnXXX (UINT id)

ON_UPDATE_COMMAND_UI/ ON_UPDATE_COMMAND_UI_RANGE

void OxXXX(CCmdUI* pCmdUI)

ON_CONTROL/

ON_CONTROL_RANGE

Void OnXXX ()/

Void OnXXX (UINT id)

ON_CONTROL_REFLECT

Void OnXXX ()

通知消息WM_NOTIFY

ON_NOTIFY

afx_msg void memberFxn ( NMHDR * pNotifyStruct, LRESULT* result );

ON_NOTIFY_REFLECT

afx_msg void memberFxn ( NMHDR * pNotifyStruct, LRESULT* result );

程序内部自定义消息

程序内部#define 的消息

ON_MESSAGE

ON_THREAD_MESSAGE

LRESULT OnXXX (WPARAM wParam, LPARAM lParam)

程序之间消息

RegisterWindowMessage得到的消息

ON_REGISTERED_MESSAGE

ON_REGISTERED_THREAD_MESSAGE

LRESULT OnXXX (WPARAM wParam, LPARAM lParam)

说明:

1)ON_COMMAND 是响应菜单栏,状态栏,工具栏发送给框架窗口的命令消息的宏。命令类型是:CN_COMMAND

2)ON_UPDATE_COMMAND_UI 是响应程序空闲时促发的界面更新消息的宏。

3)ON_CONTROL 是父窗口响应控件发送的通知消息的宏。

4)ON_CONTROL_REFLECT 是子控件响应父窗口反射回来的通知消息的的宏。

5)ON_NOTIFY 是父窗口响应复杂控件发送的通知消息的宏

6)ON_NOTIFY_REFLECT 是复杂子控件响应父窗口反射回来的通知消息的的宏。

7)ON_MESSAGE 是窗口响应自定义的消息的宏

8)ON_THREAD_MESSAGE是线程响应自定义的消息的宏

9)ON_REGISTERED_MESSAGE 是响应通过RegisterWindowMessage注册得到的消息宏。

简单的控件都是通过WM_COMMAND发送通知消息给父窗口。例如:

         Static,Edit,Richedit,Animation,Button,Listbox,ComboBox。

Static

(STN_开头)

STN_CLICKED: ( ON_STN_CLICKED / ON_CONTROL(STN_CLICKED,) )

STN_DBLCLK:  ( ON_ STN_DBLCLK / ON_CONTROL(STN_DBLCLK,) )

STN_ENABLE: 

STN_DISABLE:

Edit

(EN_开头)

EN_SETFOCUS

EN_KILLFOCUS

EN_CHANGE

EN_UPDATE

Button

(BN_开头)

BN_CLICKED

Listbox

(LBN_开头)

LBN_SELCHANGE

LBN_SETFOCUS

Combo Box

(CBN_开头)

CBN_SELCHANGE

CBN_DROPDOWN

CBN_CLOSEUP

CBN_SELENDCANCEL

CBN_SELENDOK

 

对于复杂控件,通过WM_NOTIFY来父窗口。例如:

ListView, Tree View.

List View

(LVN_开头)

LVN_COLUMNCLICK

Tree View

(TVN_开头)

TVN_SELCHANGED

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值