簡體   English   中英

MFC-無法將消息發布到派生自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.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM