MFC-CWndから派生したカスタムクラスにメッセージを投稿できません

user2654449

ワーカースレッドからメッセージを投稿したいCWndから派生したカスタムクラスがあります。これを実現するためにPostMessage関数を使用しています。PostMessageの最初の引数は、クラスへのHWNDタイプのハンドルであり、次の引数は、処理したいメッセージです。最初のパラメーターには、GetSafeHwnd()関数を使用してクラスへのハンドルを生成し、2番目のパラメーターには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から派生)で同じ手法を試しましたが、そこでは機能しますが、ここでは失敗します。

ScottMcP-MVP

ウィンドウが作成されていない場合、ウィンドウに投稿することはできません。クラスを使用して実際にウィンドウを作成していない場合、GetSafeHwnd()はNULLを返します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

VS2017MFCはコンソールにメッセージを出力できませんでした

分類Dev

MFC:CWndからサブクラス化されたクラスでRadioButtonが機能しない(グレー表示)

分類Dev

メッセージの現在のインスタンスがMFCで終了したら、メッセージを投稿するにはどうすればよいですか?

分類Dev

C ++ MFCからWPFC#アプリケーションにカスタムメッセージを送信するにはどうすればよいですか?

分類Dev

MFC / C ++プロジェクトでパラメーター1を「constwchar_t *」から「LPCTSTR」に変換できません

分類Dev

MFCで文字列とCStringクラスを使用できません

分類Dev

MFC:派生したCButtonの子を持つCDialogExは、ボタンの上にあるときにカーソルを変更しませんか?

分類Dev

MFC、CDataExchange:入力エラーをユーザーに警告するメッセージボックスを上書きします

分類Dev

MFC:別のスレッドからCWndメソッドを呼び出すのは安全ですか?

分類Dev

MFC:メッセージを投稿してメニューアクションをトリガーするには何が必要ですか?

分類Dev

MFC:CStringを使用したLoadString

分類Dev

突然「標準のMFCリソースを変更できません!」エラー

分類Dev

DocTemplateのMFCメニューをカスタム描画する方法

分類Dev

CWinAppから派生したクラスなしでMFCシリアル化を実行するにはどうすればよいですか?

分類Dev

カスタムオブジェクトの配列をC#.NETDLLからMFCに返す

分類Dev

エラーC1189MFC

分類Dev

MFC C ++ CEditから派生し、GetWindowTextを派生します

分類Dev

MFCでメッセージボックスを広げることは可能ですか?

分類Dev

MFCでCWinAppExからCViewにアクセスする方法

分類Dev

MFC:実行時に拡張

分類Dev

MFCでのGetHttpConnectionの使用

分類Dev

MFCカスタムスクロールバーの提案が必要

分類Dev

mfcプログレスバーの色を変更できませんでした

分類Dev

MFC CEditコントロールは、アクセラレータに追加された後に押されたキーを処理しません

分類Dev

ブラザーMFC-290Cで印刷できません

分類Dev

MFC:スクロールバーのつまみをドラッグしたときの奇妙な動作

分類Dev

MFCマルチスレッドプログラムは並列メソッドで実行できますか?

分類Dev

14.04をインストールしました。ブラザーMFC-J410Wプリンターのドライバーが見つかりません。

分類Dev

winetricksはmfc42をインストールできません

Related 関連記事

  1. 1

    VS2017MFCはコンソールにメッセージを出力できませんでした

  2. 2

    MFC:CWndからサブクラス化されたクラスでRadioButtonが機能しない(グレー表示)

  3. 3

    メッセージの現在のインスタンスがMFCで終了したら、メッセージを投稿するにはどうすればよいですか?

  4. 4

    C ++ MFCからWPFC#アプリケーションにカスタムメッセージを送信するにはどうすればよいですか?

  5. 5

    MFC / C ++プロジェクトでパラメーター1を「constwchar_t *」から「LPCTSTR」に変換できません

  6. 6

    MFCで文字列とCStringクラスを使用できません

  7. 7

    MFC:派生したCButtonの子を持つCDialogExは、ボタンの上にあるときにカーソルを変更しませんか?

  8. 8

    MFC、CDataExchange:入力エラーをユーザーに警告するメッセージボックスを上書きします

  9. 9

    MFC:別のスレッドからCWndメソッドを呼び出すのは安全ですか?

  10. 10

    MFC:メッセージを投稿してメニューアクションをトリガーするには何が必要ですか?

  11. 11

    MFC:CStringを使用したLoadString

  12. 12

    突然「標準のMFCリソースを変更できません!」エラー

  13. 13

    DocTemplateのMFCメニューをカスタム描画する方法

  14. 14

    CWinAppから派生したクラスなしでMFCシリアル化を実行するにはどうすればよいですか?

  15. 15

    カスタムオブジェクトの配列をC#.NETDLLからMFCに返す

  16. 16

    エラーC1189MFC

  17. 17

    MFC C ++ CEditから派生し、GetWindowTextを派生します

  18. 18

    MFCでメッセージボックスを広げることは可能ですか?

  19. 19

    MFCでCWinAppExからCViewにアクセスする方法

  20. 20

    MFC:実行時に拡張

  21. 21

    MFCでのGetHttpConnectionの使用

  22. 22

    MFCカスタムスクロールバーの提案が必要

  23. 23

    mfcプログレスバーの色を変更できませんでした

  24. 24

    MFC CEditコントロールは、アクセラレータに追加された後に押されたキーを処理しません

  25. 25

    ブラザーMFC-290Cで印刷できません

  26. 26

    MFC:スクロールバーのつまみをドラッグしたときの奇妙な動作

  27. 27

    MFCマルチスレッドプログラムは並列メソッドで実行できますか?

  28. 28

    14.04をインストールしました。ブラザーMFC-J410Wプリンターのドライバーが見つかりません。

  29. 29

    winetricksはmfc42をインストールできません

ホットタグ

アーカイブ