gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:32:17 24 4
gpt4 key购买 nike

我有一个派生自 CWnd 的自定义类,我想从工作线程向其发布消息。我正在使用 PostMessage 函数来实现这一点。 PostMessage 的第一个参数是我的类的 HWND 类型句柄,接下来是我想要处理的消息。对于第一个参数,我使用 GetSafeHwnd() 函数生成我的类的句柄,对于第二个参数,我使用 WM_USER+3。此外,我在我的类头文件中声明了一个消息映射,并在 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP block 中为消息处理程序添加了一个条目。但是,我的处理程序没有被调用。我也查看了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。

关于c++ - MFC - 无法将消息发布到从 CWnd 派生的自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com