我有一个派生自CWnd的自定义类,我想将消息发布到工作线程中。我正在使用PostMessage函数来实现此目的。PostMessage的第一个参数是类的HWND类型句柄,第二个是我要处理的消息。对于第一个参数,我使用GetSafeHwnd()函数生成类的句柄,对于第二个参数,我使用WM_USER + 3。另外,我在类头文件中声明了一个消息映射,并在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP块中添加了消息处理程序的条目。但是,我的处理程序没有被调用。我还检查了PostMessage函数的返回值,它是1,表示成功。
这是我的代码:
在MyClass.h中
class CMyClass : CWnd
{
....
....
public:
void InitHandle();
protected:
afx_msg LRESULT OnMessageReceived(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
}
内MyClass.cpp
#define WM_MY_MESSAGE WM_USER+3
HWND handleToMyClassWindow;
BEGIN_MESSAGE_MAP(CMyClass, CWnd)
ON_MESSAGE(WM_MY_MESSAGE, OnMessageReceived)
END_MESSAGE_MAP()
LRESULT CMyClass::OnMessageReceived(WPARAM wParam, LPARAM lParam)
{ .... }
void CMyClass::InitHandle()
{
handleToMyClassWindow = GetSafeHwnd();
}
内部工作线程
UINT WorkerThreadFunction(LPVOID pParam )
{
....
PostMessage(handleToMyClassWindow, WM_MY_MESSAGE, NULL, NULL);
....
}
我的问题是,不调用OnMessageReceived处理程序的可能原因是什么?
聚苯乙烯
我要注意调用对象会调用InitHandle()函数。
我在程序的View类(从CView派生)中尝试了相同的技术,但该方法在那里工作,但在这里失败。
如果尚未创建,则无法发布到窗口。如果您尚未使用类实际创建窗口,则GetSafeHwnd()将返回NULL。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句