常见的消息映射格式总结

来源:互联网 发布:msde和sql 编辑:程序博客网 时间:2024/05/21 12:40

在MFC中想要完成消息映射,需要在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP两个宏之间进行消息映射声明才行, 例如:

//开始消息映射的定义(必须用在类实现中) BEGIN_MESSAGE_MAP(CMyClass, CBase)...ON_CONTROL_REFLECT(CBN_DROPDOWN, &CMyClass::OnCbnDropdown)ON_WM_MOUSEMOVE()...//结束消息映射的定义(必须用在类实现中)  END_MESSAGE_MAP()

常见消息映射格式

现在对常见的消息映射格式和声明进行总结如下:

标准消息

标准消息开头是以WM_开始的, 形如WM_CLOSE,对这种消息其格式如下,是否有形参和具体消息有关系。

映射格式:
ON_WM_CLOSE()

函数声明:
afx_msg void OnClose()

命令消息

命令消息是通过WM_COMMAND 形式进行传递的,它可以响应菜单命令,工具栏命令,按钮命令等。

消息映射:
ON_COMMAND(id, memberFxn)

函数声明:
afx_msg void memberFxn()

通告消息

通告消息一般是用户点击控件,控件向父窗口(对话框)发出对应的事件消息,比如CBN_DROPDOWN、BN_CLICKED等;通告消息都具有相同的函数声明,仅消息映射有所区别,下面列举出不同控件的消息映射。

各控件的函数声明:

afx_msg void memberFxn( )

各控件的消息映射:

  • 普通控件
ON_CONTROL( <wNotifyCode>,<id>,<memberFxn> )
  • 按钮控件
ON_BN_PAINT(<id>, <memberFxn> ) ON_BN_CLICKED(<id>, <memberFxn> ) ON_BN_DISABLE(<id>, <memberFxn> ) ON_BN_HILITE(<id>, <memberFxn> ) ON_BN_UNHILITE(<id>, <memberFxn>)  ON_BN_DOUBLECLICKED(<id>,<memberFxn>)
  • 编辑控件
ON_EN_CHANGE(<id>, <memberFxn>  ) ON_EN_ERRSPACE(<id>, <memberFxn>) ON_EN_HSCROLL(<id>, <memberFxn> )ON_EN_KILLFOCUS(<id>,<memberFxn>) ON_EN_MAXTEXT(<id>, <memberFxn> )ON_EN_SETFOCUS(<id>, <memberFxn>)ON_EN_UPDATE(<id>, <memberFxn>  ) ON_EN_VSCROLL(<id>, <memberFxn> )
  • 组合框控件
ON_CBN_CLOSEUP(<id>, <memberFxn>   )ON_CBN_DBLCLK(<id>, <memberFxn>    ) ON_CBN_DROPDOWN(<id>, <memberFxn>  )ON_CBN_EDITCHANGE(<id>,<memberFxn> )ON_CBN_EDITUPDATE(<id>,<memberFxn> )ON_CBN_ERRSPACE(<id>, <memberFxn>  )ON_CBN_KILLFOCUS(<id>, <memberFxn> )ON_CBN_SELCHANGE(<id>, <memberFxn> )ON_CBN_SELENDCANCEL(<id>,<memberFx>)ON_CBN_SELENDOK(<id>, <memberFxn>  )ON_CBN_SETFOCUS(<id>, <memberFxn>  )
  • 列表框控件
ON_LBN_DBLCLK(<id>, <memberFxn>   ) ON_LBN_ERRSPACE(<id>, <memberFxn> ) ON_LBN_KILLFOCUS(<id>, <memberFxn>)ON_LBN_SELCHANGE(<id>, <memberFxn>)ON_LBN_SETFOCUS(<id>, <memberFxn> ) 

状态更新消息

状态更新消息主要应用更新菜单项和工具栏按钮,其消息映射和函数声明如下:
消息映射:
ON_UPDATE_COMMAND_UI(id, memberFxn)

函数声明:
afx_msg void memberFxn(CCmdUI *pCmdUI);

自定义消息

MFC提供了自定义消息的函数映射接口,便于用户定义自己的消息,其函数映射入口和函数声明如下:

消息映射:
ON_MESSAGE(message, memberFxn)

函数声明:
afx_msg LRESULT memberFxn(WPARAM, LPARAM);

消息反射

消息反射是指父窗口在收到控件消息(通告消息,标准消息)后,再传递给子控件本身来处理,父窗口不处理,其格式如下:

对于WM_COMMAND 形式的:

//消息映射:ON_CONTROL_REFLECT( wNotifyCode, memberFxn ) //函数声明:afx_msg void memberFxn ( ); 

对于WM_NOTIFY形式的:

//消息映射:ON_NOTIFY_REFLECT(wNotifyCode, memberFxn) //函数声明:afx_msg void memberFxn (NMHDR * pNotifyStruct, LRESULT* result); 

更多信息见Windows控件消息反射


VS2008添加消息映射的方法

  • 步骤1 选中类视图

  • 步骤2 选中继承的控件类->鼠标右键->选择属性

  • 步骤3 属性中点击消息按钮->选择带”=”的消息,如下所示:
    这里写图片描述

1 0
原创粉丝点击