zoukankan      html  css  js  c++  java
  • Mfc资源消息的响应机制

    Mfc消息的响应机制

     

    Mfc中有很多资源,如图标资源,菜单资源,工具栏资源等等;那么,资源是如何进行消息响应和消息映射的呢?

    它们的流程是:

    某种资源——对应的ID号——消息映射——响应函数的声明与实现

    下面我们以工具栏的资源响应为例:(多文档的应用程序)

    1.       在工具栏资源增加一个图标(随便画一下),双击它,设置它的资源ID为:ID_MYICON

    2.       在View类的.cpp文件中添加消息映射;

    找到BEGIN_MESSAGE_MAP()与END_MESSAGE_MAP()

    之间的代码,添加消息映射语句

    ON_COMMAND(ID_MYICON,OnMyicon)

    其中,第一个参数是资源的ID号;第二个为消息响应的函数名,为了与MFC的习惯保持一致,我们将其命名为OnMyicon

    3.       消息响应函数的声明

    在View类中增加成员函数afx_msg void OnMyicon();

    4.       消息响应函数的实现

    在View类的.cpp文件中实现OnMyicon()函数;

    void CXXXXXView::OnMyicon()

    {

             MessageBox("消息映射成功!");

    }

    菜单资源的消息响应机制于此完全相同;

     

    Windows操作系统中包括以下几种消息:

    1、标准Windows消息:这种消息以WM_打头。   

    2、通知消息   

    通知消息是针对标准Windows控件的消息。

    这些控件包括:按钮(Button)、组合框(ComboBox)、编辑框(TextBox)、列表框(ListBox)、ListView控件、Treeview控件、工具条(Toolbar)、菜单(Menu)等。每种消息以不同的字符串打头。(见附录)   

    3、自定义消息  编程人员还可以自定义消息。

     

    附录:

    从MSDN中,我们可以看查到很多的ON_开头的,一下列举其中一些示例

    User Button Handlers(按钮)

    Map Entry

    Function Prototype

    ON_BN_CLICKED( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_BN_DISABLE( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_BN_DOUBLECLICKED( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_BN_HILITE( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_BN_PAINT( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_BN_UNHILITE( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    Combo Box Handlers(组合框)

    Map Entry

    Function Prototype

    ON_CBN_CLOSEUP( <id>, <memberFxn> )

    afx_msg void memberFxn( )

    ON_CBN_DBLCLK( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_CBN_DROPDOWN( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_CBN_EDITCHANGE( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_CBN_EDITUPDATE( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_CBN_ERRSPACE( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_CBN_KILLFOCUS( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_CBN_SELCHANGE( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_CBN_SELENDCANCEL( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_CBN_SELENDOK( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_CBN_SETFOCUS( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    Edit Control Handlers(编辑框)

    Map Entry

    Function Prototype

    ON_EN_CHANGE( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_EN_ERRSPACE( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_EN_HSCROLL( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_EN_KILLFOCUS( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_EN_MAXTEXT( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_EN_SETFOCUS( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_EN_UPDATE( <id>, <memberFxn> )

    afx_msg void memberFxn( );

    ON_EN_VSCROLL( <id>, <memberFxn> )

    afx_msg void memberFxn( );

     

     

     

    等等………………………………(参看MSDN)

  • 相关阅读:
    Easyui-datagrid显示时间的格式化代码
    JSP页面与JSP页面之间传输参数出现中文乱码的解决方案
    SpringMVC中在web.xml中添加中文过滤器的写法
    SpringMVC的实现过程
    BeanFactory 和 ApplicationContext的区别
    Spring中的IoC(控制反转)具体是什么东西
    Spring/AOP框架, 以及使用注解
    面向切面编程
    Spring的属性注入, byName和byType还有注入List属性
    反射, getClass(), 和something.class以及类型类(转)
  • 原文地址:https://www.cnblogs.com/lidabo/p/3501345.html
Copyright © 2011-2022 走看看