c++ - 使用 MFC 创建 WM_USER 处理程序

标签 c++ windows mfc

虽然我有丰富的软件经验,但我并没有进行大量的 Windows 编程。我正在尝试从线程发布 WM_USER 消息,以便在主 UI 线程中获取它,但我遇到了一些麻烦。这是在 C++ 中使用 VS2010 和 MFC。

我已经创建了一个消息映射,

#define WM_MYMSG (WM_USER + 77)
BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
    ON_MESSAGE(WM_MYMSG, DoSomething)
END_MESSAGE_MAP()

声明处理函数如下,

afx_msg LRESULT DoSomething(WPARAM wParam, LPARAM lParam);

并将函数体写成,

LRESULT CMyApp::DoSomething( WPARAM wParam, LPARAM lParam ) 
{
    UNREFERENCED_PARAMETER(wParam);
    UNREFERENCED_PARAMETER(lParam);

    CallSomeFunction();
    return 0L;
}

据我所知,这完全符合 MSDN 所说的内容。

http://msdn.microsoft.com/en-gb/library/k35k2bfs(v=vs.100).aspx

但是我得到了一个

error C2440: 'static_cast' : cannot convert from 'LRESULT (__cdecl CMyApp::*)(WPARAM,LPARAM)' to 'LRESULT (__cdecl CWnd::* )(WPARAM,LPARAM)'

关于线路

ON_MESSAGE(WM_AVATAR_SCALE_MSG, DoSomething)

谁能告诉我问题出在哪里?

感谢阅读。

保罗

最佳答案

CMyApp继承自CWinApp,CWinApp继承自CWinThread。 CWinThread 用户定义的消息在它们的消息映射中使用一个特殊的宏来执行您想要执行的操作:

改变这个:

ON_MESSAGE(WM_AVATAR_SCALE_MSG, DoSomething)

对此:

ON_THREAD_MESSAGE(WM_AVATAR_SCALE_MSG, DoSomething)

假设 DoSomething() 是您的 CMyApp 类的成员。

请参阅 ON_THREAD_MESSAGE() 上的文档获取更多信息。

关于c++ - 使用 MFC 创建 WM_USER 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15474346/

相关文章:

c++ - 使用 STL 在 C++ 中计算分区

c++ - 带 & 的基于范围的 for 循环

c++ - UAC 提示提升 - 它是如何工作的?

c++ - 自定义 CFileDialog 错误消息

visual-studio-2005 - MFC:为什么我的旋转控制向后工作

c++ - 类模板特化中的成员变量别名

c++ - 什么是好的网格动画技术?

c++ - MFC、EndDialog、重复创建对话框导致意外行为

mysql - UTF8 在翻译中丢失,HTML 格式从/到 mysql

c++ - MFC与WPF进程间通信