【问题标题】:Trying to return value from Message c++ mfc试图从消息 c++ mfc 返回值
【发布时间】:2015-10-28 15:03:51
【问题描述】:

我正在使用 c++ mfc 并在我的 dlg 中声明消息:

LRESULT CMyWnd2::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
    wParam=5;
    lParam=6;
    return 0;
}

使用代码:

WPARAM w=0;
LPARAM l=0;
SendMessage(hwnd,messageId,w,l);
cout<<w<<l<<endl;

打印:

0
0

如何更改 w / l 参数的值?

【问题讨论】:

  • 我不确定你在问什么。你想返回什么“价值”?你到底想做什么?
  • iwm 试图更新 WPARAM/LPARAM 的值
  • 不,还不清楚。请通过编辑问题进行扩展,以明确您的要求。
  • @LitalKapara,除非wParamlParam 引用了您不能直接“更新”这些参数的对象。那没有意义。我的猜测是你试图告诉一些控制或一些对话框。
  • 我正在编辑我的问题

标签: c++ winapi mfc


【解决方案1】:

函数不能改变按值传入的参数。

但是,您可以将指针传递给 LPARAM 中所需的任何数据结构,并在消息处理程序中修改该数据结构。

这里是你如何使用它:

int myValueToBeUpdated = 0;
SendMessage(hwnd, messageId, 0, (LPARAM)&myValueToBeUpdated);
cout << myValueToBeUpdated << endl;

和消息处理程序:

LRESULT CMyWnd2::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
    int* p = (int*)lParam;
    *p = 42;
    return 0;
}

【讨论】:

    【解决方案2】:
    LRESULT CMyWnd2::OnMyMessage(WPARAM wParam, LPARAM lParam)
    {
        *((WPARAM*)wParam)=5;
        *((LPARAM*)lParam)=6;
        return 0;
    }
    
    
    WPARAM w=0;
    LPARAM l=0;
    SendMessage(hwnd,messageId,(WPARAM)&w,(LPARAM)&l);
    cout<<w<<l<<endl;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-28
      • 2012-12-07
      • 2014-08-20
      • 2011-11-03
      • 1970-01-01
      • 2016-09-24
      • 2017-07-04
      • 2020-07-28
      相关资源
      最近更新 更多