MFC-无法将消息发布到派生自CWnd的自定义类

用户名

我有一个派生自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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MFC-无法将消息发布到派生自CWnd的自定义类

来自分类Dev

MFC控件的消息流?

来自分类Dev

在MFC中处理消息

来自分类Dev

MFC控件的消息流?

来自分类Dev

MFC CWnd的高度和宽度

来自分类Dev

如何钩住MFC CWnd创建

来自分类Dev

MFC:CWnd :: SendMessage()仅将消息发送到其类,还是其他类可以捕获它?

来自分类Dev

MFC自定义控件背景/文本颜色

来自分类Dev

如何为 DocTemplate 自定义绘制 MFC 菜单

来自分类Dev

MFC 自定义滚动条的建议

来自分类Dev

MFC:现在不显示从CDialog到CWnd的CStatusBar吗?

来自分类Dev

将一组自定义对象从 C#.NET DLL 传递回 MFC

来自分类Dev

消息映射MFC:继承多个消息映射

来自分类Dev

消息映射MFC:继承多个消息映射

来自分类Dev

在MFC中完成当前消息实例后,如何发布消息?

来自分类Dev

是否可以在MFC中加宽消息框?

来自分类Dev

试图在MFC上实现TextBox错误消息

来自分类Dev

MFC制作类扩展CView和CDockablePane

来自分类Dev

MFC-无法直接创建控件

来自分类Dev

无法在MFC中看到添加变量向导

来自分类Dev

winetricks无法安装mfc42

来自分类Dev

winetricks无法安装mfc42

来自分类Dev

无法更改MFC进度栏颜色

来自分类Dev

酒神无法找到mfc40

来自分类Dev

无法更改MFC应用程序图标

来自分类Dev

突然“无法更改标准的MFC资源!” 错误

来自分类Dev

如何将自定义消息从C ++ MFC发送到WPF C#应用程序?

来自分类Dev

MFC - D3DCOLORVALUE 在基本 MFC 应用程序中未定义

来自分类Dev

将文本复制到MFC中的剪贴板