用MFC创建一个WM_USER处理程序
Creating a WM_USER handler with 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()
的文档获取更多信息
问题是消息映射期望在CWnd上有一个函数,而您的类显然不是CWnd,要么实际上是CWnd,要么继承了CWnd。
该函数期望您传递一个CWnd方法,该方法接受一个WPARAM和一个LPARAM,但您传递的是CMyApp的一个函数。
让CMyApp类从CWnd类扩展出来:
class CMyApp : public CWnd {
// members here
};
编辑
如果这是不可能的,那么您将不得不找到一种方法来传递CWnd的函数或从CWnd扩展的类的任何其他函数,并使用正确的参数和返回类型。
相关文章:
- "WM" C++是什么意思?
- P1008("prohibit aggregates with user-declared constructors")在实践中什么时候有用?
- 函数模板不起作用,出现错误"No suitable user-defined conversion"
- nirq:标志不匹配irq80.00002083(ledtrig-gpio)对00000083(USER)
- 在哪里定义了预定义'user-defined'文本"m"的标准库?
- 如何为 VS2017 自定义 Microsoft.Cpp.Win32.User.props
- 代码块 IDE 中'user keywords'了哪些内容?
- 当我运行我的程序时,即使"user"输入数字||C++ 绘画作业
- 登录系统C++:输入我的字符串User&Pass后,它要求我重新输入它们
- 我们可以在 c++ 中使用运算符重载添加 "User defined Datatype" + "Predefined Data Type"
- 什么是窗口最大化/最小化/恢复的WM Windows消息
- 请求X11在C或C++中合成WM的图像
- "User-defined literal operator not found"
- 规则"A user-defined but do-nothing destructor is also a non-trivial destructor"太严格了?
- C++ 零法则 &什么是构造函数"user-declared"?
- 是Set-user-id位设置
- Template类,并强制某些方法由User实现
- 在磁贴上显示 V2 凭据提供程序'Other user'
- Maven User-Agent property and pluginRepository
- 删除复制构造函数或复制赋值运算符算"user declared"吗?