虽然我有丰富的软件经验,但我并没有进行大量的 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/