[英]Is there a message handler like 'OnPostCreate' for the MFC CWnd class?
[英]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.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處理程序的可能原因是什么?
PS
我注意調用對象將調用InitHandle()函數。
我在程序的View類(從CView派生)中嘗試了相同的技術,但該方法在那里工作,但此處失敗。
如果尚未創建,則無法發布到窗口。 如果您實際上尚未使用類創建窗口,則GetSafeHwnd()將返回NULL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.