不能将消息发送到从CWnd派生的自定义类
MFC - Cannot Post Message to a custom class derived from CWnd
我有一个从CWnd派生的自定义类,我想从工作线程发布消息。我使用PostMessage函数来实现这一点。PostMessage的第一个参数是我的类的HWND类型句柄,下一个是我想处理的消息。对于第一个参数,我使用GetSafeHwnd()函数生成类的句柄,对于第二个参数,我使用WM_USER+3。另外,我在类头文件中声明了一个消息映射,并在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP块中为消息处理程序添加了一个条目。然而,我的处理程序没有被调用。我也检查了PostMessage函数的返回值,它是1,这意味着成功。
下面是我的代码: 在MyClass.hclass 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);
....
}
我的问题是,onmessagerreceived处理程序不被调用的可能原因是什么?
公立小学我注意到调用对象调用了InitHandle()函数。
我尝试了同样的技术与我的程序的视图类(从CView派生),它在那里工作,但在这里失败。
如果未创建窗口,则不能向窗口发送内容。如果你没有使用你的类创建一个窗口,GetSafeHwnd()将返回NULL。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何使用单独文件中的派生类访问友元函数对象
- 派生类销毁的最佳实践是什么
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 存储模板类型以强制转换回派生<T>
- 需要从 istream 和 ostream 派生 iostream
- 在 C++ 中用派生类型重写成员函数
- 具有多个类、派生类的C++正向声明
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 如果基类包含双指针成员,则派生类的构造函数
- 不能将消息发送到从CWnd派生的自定义类
- 为什么子控件未出现在 MFC 派生的 CWnd 中