C++カスタムメッセージの方法


まず2点を明らかにします.
(1)誰がこのメッセージを送信するか(2)誰がこのメッセージを受信するか.
簡単な例で説明する.オブジェクトAは、B(すなわち、A〜A)にメッセージを送信する.
1メッセージの送信
まず、Aのヘッダファイルでこのメッセージを定義します.
注意:実際にはstdafx.hで定義すると、このマクロはA、Bで使用する必要があります.
#define WM_USERMESSAGE WM_USER+30

すべてのカスタムメッセージはWM_USERメッセージは,任意の自然数を加えて表す.Aはメッセージを外部に送信するオブジェクトであるため、Aのあるメソッド(関数)でメッセージを送信するための関数B::SendMessage()/B::PostMessage()が呼び出され、Bがメッセージを受信するため、このような形式である.
2メッセージの受信
オブジェクトはメッセージを受け入れます.3つの部分があるはずです.ヘッダファイルにはメッセージの処理関数のプロトタイプがあります.インプリメンテーションファイルには、メッセージマッピングを受信するマクロがあります.およびメッセージの処理関数の具体的な実装.
次に、「スレッド」ダイアログ・ボックスで「クラス」ウィザードを使用してカスタム・メッセージを追加できます.
メッセージ名WM_が確認されますUSERMESSAGEはすでにメッセージ応答関数を持っています.その後、関数の中でメッセージに応答すればいいです.関数のパラメータはSendMessage()/B:PostMessage()入力とずっと必要です.
WPARAM wParam,LPARAM lParam
インスタンス(他のスレッドがスレッドダイアログボックスを呼び出す更新関数)は、次のとおりです.
もう1つは、メッセージを送る方法でUIスレッドに移行する処理である.ウィンドウにON_などのメッセージをマッピングできます.MESSAGE(WM_UPDATEDATA,OnUpdateData),
その後、他のスレッドはSendMessage(WM_UPDATEDATA,FALSE)でウィンドウにメッセージを送ることができ、ウィンドウのメッセージ処理はUIスレッドの中にあるに違いない.この場合、
LRESULTCProtectPage::OnUpdateData(WPARAMwParam,LPARAMlParam)
{
UpdateData(wParam);
return0;
}
2.1ヘッダファイルにカスタムメッセージを加えた処理関数のプロトタイプ
DECLARE_MESSAGE_MAP()文の前に、一対のAFX_MSG間には、次のような形式の関数プロトタイプが付加される.
  afx_msg LRESULT OnProcName( WPARAM wParam, LPARAMlParam );
Win 32にとってwParam,lParamはメッセージを伝達する最も一般的な手段である.
2.2インプリメンテーションファイルにメッセージマッピングを受け入れるマクロを加える
cppファイルで、BEGIN_MESSAGE_MAP文の後、一対のAFX_MSG_MAP間では、次の形式のコードが追加されます.
  ON_MESSAGE(WM_USERMESSAGE, OnProcName)
上はセミコロンで終わりません.2.3実装ファイルにメッセージ処理関数の具体的な実装を与える.