メッセージ マップ (ATL)
メッセージ マップでは、特定のメッセージ、コマンド、または通知とハンドラー関数を関連付けます。 ATL メッセージ マップ マクロを使用すると、ウィンドウにメッセージ マップを指定できます。 CWindowImpl、CDialogImplと CContainedWindowT のウィンドウ プロシージャは、メッセージ マップにウィンドウのメッセージを表示します。
メッセージ ハンドラー関数 の場合、型 BOOL&の追加の引数。 この引数は、メッセージが処理された TRUE に、既定でに設定されます。また。 ハンドラー関数が FALSE にメッセージが不要であることを示すには、引数を設定できます。 この場合、ATL には、メッセージ マップのハンドラー関数の詳細を検索します。 FALSEにこの引数を設定すると、メッセージに応答して最初にアクションを実行し、メッセージを処理する最後に既定の処理、または別のハンドラー関数を割り当てることができます。
チェーン メッセージ マップ
ATL は、別のクラスで定義されているメッセージ マップにメッセージ処理を指示するメッセージ マップをチェーンすることができます。 たとえば、そのクラスにチェーンするすべてのペインに均等な動作を提供するために別のクラスに共通メッセージ処理を実行できます。 基本クラスまたはクラスのデータ メンバーに連結できます。
ATL は、実行時に別のオブジェクトのメッセージ マップに連結できる動的チェインをサポートします。 動的チェインを実行するには、CDynamicChainからクラスを派生させる必要があります。 次に、メッセージ マップの CHAIN_MSG_MAP_DYNAMIC のマクロを宣言します。 CHAIN_MSG_MAP_DYNAMIC は、チェーン対象のメッセージ マップとオブジェクトを識別する一意の数字が必要です。 CDynamicChain::SetChainEntryの呼び出しによってこの一意の値を定義する必要があります。
CMessageMapクラスがから派生する場合、メッセージ マップを宣言する任意のクラスにチェーンできます。 CMessageMap は、オブジェクトが他のオブジェクトにメッセージ マップを公開するようにします。 CWindowImpl が CMessageMapから派生します。
メッセージ マップを交互にします。
最後に、ATL は ALT_MSG_MAP のマクロで宣言される代替メッセージ マップをサポートします。 それぞれの代替メッセージ マップでは、ALT_MSG_MAPに渡す一意の番号で識別されます。 代替メッセージ マップを使用して、1 種類のマップの複数のウィンドウのメッセージを処理できます。 は、CWindowImpl 使用しない代替メッセージ マップを既定では注意してください。 このサポートを追加し、それを CWindowImplの WindowProc 派生クラスのメソッドをオーバーライドし、メッセージ マップの識別子との ProcessWindowMessage を呼び出します。