zoukankan      html  css  js  c++  java
  • 常见的消息映射格式总结

    在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 属性中点击消息按钮->选择带”=”的消息,如下所示:
      这里写图片描述

  • 相关阅读:
    POJ 1511
    POJ 1125
    POJ 2240
    POJ 1459
    POJ 1274
    POJ 1789
    POJ 2485,1258
    POJ 1236
    POJ 1273
    Ruby on Rails 观后感
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468311.html
Copyright © 2011-2022 走看看