• ON_MESSAGE的使用(转)


    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    Date: 20180815

    msdn:https://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=ZH-CN&k=k(ON_MESSAGE);k(DevLang-C%2B%2B);k(TargetOS-Windows)&rd=true

    ON_MESSAGE(message, memberFxn)

    指定哪一个函数用来处理这个用户定义消息;

    头文件:  afxmsg_.h

    参数:  

    message      消息ID,这里指的是用户定义消息的ID

    memberFxn     消息映射消息处理函数的名称;

              函数的类型必须是:  afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM);

    备注:

      用户定义消息不属于任何一种标准Windows WM_MESSAGE消息。当选择消息标识时,必须使用某一范围的值:WM_USER(0x0400)到0x7FFF或WM_APP(0x8000)到0xBFFF。

      对于每一个用户定义消息,在message map中必须要有一个ON_MESSAGE宏定义语句来映射到一个消息处理函数。

    注意:除了用户定义消息外,ON_MESSAGE还处理较为不常见的Windows消息。


    定义:

    // 头文件中宏定义用户定义消息:
    #define
    WM_MYMESSAGE (WM_USER + 100)
    // 源文件中进行用户定义消息注册
    BEGIN_MESSAGE_MAP(CMyWnd2, CWnd) ON_MESSAGE(WM_MYMESSGAE, OnMyMessage) END_MESSAGE_MAP()
    // 头文件中进行用户定义消息响应函数的声明
    //
    inside the CMyWnd2 class declaration afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
    // 源文件中进行用户定义消息响应函数的实现
    LRESULT CMyWnd2::OnMyMessage(WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(lParam);
    // Handle message here. return 0; }

    怎么使用呢?

    1. 如果用户定义消息所在的类是由CWnd类派生的,且在本类中进行调用,那么我们可以调用CWnd::SendMessage()函数;若希望在不同的情况下发送用户定义消息,只需要将SendMessage函数的参数加以标识就ok了,一种方法就是在消息响应函数中,使用条件语句进行不同情况的处理。

    2. 如果希望在其它类中响应这个用户定义消息,那么我们可以选择使用win32 的API。比如:当用户定义消息在CMainFrame中,而它对应的响应函数在其它类当中,需这样做:

    ::SendMessage(::AfxGetMainWnd()->m_hWnd, WM_MYMSG, 0, 0);

    注:或选择使用PostMessage。

    ————》》》》》SendMessage与PostMessage::待做我还是选择暂时学习前辈的

  • 相关阅读:
    RAM disk
    将2个物理磁盘做成4个逻辑卷
    LVM——基本概念
    服务器CPU架构演变过程
    IBM XIV
    011——一些貌似高逼格的词汇
    010——存储系统架构演变
    010——集群化
    009——虚拟化
    008——协议融合
  • 原文地址:https://www.cnblogs.com/xiawuhao2013/p/9484732.html
Copyright © 2020-2023  润新知