ALT_MSG_MAP
ATL は、マクロで宣言された代替メッセージ マップをサポートします。
各代替メッセージ マップは、 に渡す一意の番号によって識別されますALT_MSG_MAP
。
代替メッセージ マップを使用すると、複数のウィンドウのメッセージを 1 つのマップで処理できます。
デフォルトでは、CWindowImpl
は代替メッセージ マップを使用しないことに注意してください。
このサポートを追加するには、派生クラスのWindowProc
メソッドをオーバーライドし、メッセージ マップ識別子を使用して呼び出します。CWindowImpl
ProcessWindowMessage
WTL を見ると、次のようなメッセージ マップが表示されます。
BEGIN_MSG_MAP(CCommandBarCtrlImpl)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_FORWARDMSG, OnForwardMsg)
...
ALT_MSG_MAP(1) // Parent window messages
MESSAGE_HANDLER(WM_INITMENUPOPUP, OnParentInitMenuPopup)
...
ALT_MSG_MAP(2) // MDI client window messages
// Use CMDICommandBarCtrl for MDI support
ALT_MSG_MAP(3) // Message hook messages
MESSAGE_HANDLER(WM_MOUSEMOVE, OnHookMouseMove)
...
END_MSG_MAP()
しかし、私は理解していません:
彼らがどのように呼ばれるか。(コードは代替メッセージ マップの存在をどのように認識しますか?)
デフォルトのメッセージ マップとの違い。それらはすべて、同じウィンドウに対して同じ種類のメッセージを処理しているように見えます...
なぜ便利なのか。(とにかく、それらはすべて同じウィンドウ用ではありませんか?)
代替メッセージマップが何をするかについて、誰かがより良い説明を持っていますか?
(なぜそれらが発明されたのかについての動機は非常に役に立ちます。)