zoukankan      html  css  js  c++  java
  • 为何在自定义消息处理函数中无法利用wParam或lParam传递指针?

    答:利用ON_COMMAND()宏创建的自定义消息处理机制确实无法使用wParam与lParam参数,这是由于ON_COMMAND()宏决定的。如果需要使用wParam与lParam参数,那么应当使用ON_MESSAGE()宏,由它扩展生成的消息处理函数的原型中才有这两个参数。

    在.H文件中需要加入#define WM_MYMSG WM_USER+5以自定义一个消息,并在消息处理映射表中加入afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam)进行自定义消息的处理函数声明,这个声明一定要放在DECLARE_MESSAGE_MAP()宏之前。

    afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); //自定义消息的处理函数声明在.CPP文件中的消息映射表(BEGIN_MESSAGE_MAP与END_MESSAGE_MAP宏之间的内容)中需要加入ON_MESSAGE(WM_MYMSG, OnMyMessage)宏在自定义消息与其处理函数间建立映射关系,并实现消息处理函数void CModelessDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)。

    void CModelessDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
    //从lParam中取出CString对象的指针,并将字符串内容在IDC_MSGEDIT中显示出来
    {
      CString* pStr = (CString*) lParam;
      ASSERT(pStr != NULL);
          
      CEdit* pEdit = (CEdit *) GetDlgItem(IDC_MSGEDIT);
      ASSERT(pEdit != NULL);

      pEdit->SetWindowText(*pStr);
    }

    下载源代码


    ON_COMMAND用来处理WM_COMMAND消息。老式的windows控件发送WM_COMMAND作为对父窗口的通知消息。另外,菜单,工具栏也向框架窗口发送WM_COMMAND消息。   
     ON_MESSAGE主要用来处理用户自定义消息。

  • 相关阅读:
    剑指offer(45)扑克牌顺子
    剑指offer(44)单词翻转序列
    剑指offer(43)左旋转字符串
    剑指offer(42)和为S的字符串
    剑指offer(41)和为S的连续正数序列
    剑指offer(40)数组中只出现一次的数字
    剑指offer(39)平衡二叉树
    面试金典——字符串压缩
    LeetCode——恢复二叉搜索树
    LeetCode——修剪二叉搜索树
  • 原文地址:https://www.cnblogs.com/wqj1212/p/1089029.html
Copyright © 2011-2022 走看看