尽管我有丰富的软件经验,但是我并没有做很多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/

10-13 07:02