• MFC中不同对话框间使用SendMessage发送自定义消息的具体实现


    1. 基本知识
    SendMessage的基本结构如下:
    SendMessage(
        HWND hWnd,  //消息传递的目标窗口或线程的句柄。
        UINT Msg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,)
        WPARAM wParam, //参数1 (WPARAM 其实是与UINT是同种类型的,
      //在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看。 
        LPARAM lParam); //参数2
    其中一些参数的由来如下:
    //typedef unsigned int UINT;
    //typedef UINT WPARAM;
    //typedef LONG LPARAM;
    //typedef LONG LRESULT;
    2.具体实现
    主要有两部分组成,一部分是发送消息的对话框,一部分是接受消息的对话框。
    1)发送消息部分
    (1).首先在发送消息的头文件中自定义一个消息,格式如下:
    #define WM_USERMESSAGE WM_USER+101 //WM_USERMESSAGE为自己定义的消息名称
    (2).然后在要发送消息的函数中添加将要发送的自定义消息,代码如下:
    ::SendMessage(hwnd,WM_USERMESSAGE,XXXX,XXXX);
    其中,hwnd是要发送到的对话框的句柄,WM_USERMESSAGE为用户自定义的消息名称,若传值,则放在后两个参数中。
    2)接收消息部分
    (1).首先同样在头文件中定义自定义消息(与发送消息部分保持一致),如下:
    #define WM_USERMESSAGE WM_USER+101 //WM_USERMESSAGE为自己定义的消息名称
    (2).假设打算在函数ReceiveMessage()中接收函数,那么在接收对话框的头文件中找到消息映射函数的声明部分,加入自定义的消息映射函数声明, 如下:
    // Generated message map functions //{{AFX_MSG(CBaseInfoView)
     
    afx_msg LRESULT ReceiveMessage(WPARAM wParam, LPARAM lParam); //添加自定义消息声明,其他代码行为程序原有 
     
    //}}AFX_MSG
    然后在接收消息对话框的源文件中找到消息映射宏部分,加入我们自定义的消息映射宏,代码如下:
    BEGIN_MESSAGE_MAP(CBaseInfoView, CFormView)//
      //{{AFX_MSG_MAP(CBaseInfoView)  
     
    ON_MESSAGE(WM_USERMESSAGE,ReceiveMessage) // 添加自定义消息映射宏,其他代码行为程序原有 
     
    //}}AFX_MSG_MAP END_MESSAGE_MAP()
    最后在源文件中自定义消息接收函数ReceiveMessage中添加接收消息处理函数,例如下:
    LRESULT CBaseInfoView::ReceiveMessage(WPARAM wParam, LPARAM lParam)  
    {  
    int recvint = wParam;  
    CString recvstr = (LPCTSTR)lParam;
    XXXXXXXXXXXXXX   //自定义消息处理,recvint和recvstr为传递过来的值,可根据需要进行选择处理
    return true; 
    }
  • 相关阅读:
    LeetCode 130. 被围绕的区域 (DFS)
    LeetCode 200. 岛屿数量 (BFS)
    LeetCode 200. 岛屿数量 (DFS)
    Win10下Anaconda命令行相关操作
    LeetCode 53. 最大子序和
    从尾到头打印链表
    字符串逆序
    交换俩字符串
    LeetCode 147. 对链表进行插入排序
    LeetCode 面试题 02.08. 环路检测
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/3847979.html
Copyright © 2020-2023  润新知