尽管我有丰富的软件经验,但是我并没有做很多Windows编程。我正在尝试从线程发布WM_USER消息,以便它在主UI线程中被拾取,但遇到了一些麻烦。这是使用VS2010和MFC的C++语言。
我因此创建了一个消息映射,
#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,后者继承自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/