メッセージ マップ ハンドラー関数は、特定のメッセージ、コマンド、または通知を関連付けます。ATL のメッセージ マップ マクロを使用して、ウィンドウのメッセージ マップを指定できます。CContainedWindow CDialogImpl、 CWindowImplのウィンドウ プロシージャをウィンドウのメッセージのメッセージ マップに直接します。
メッセージ ハンドラー関数の種類の追加の引数を受け入れる BOOLamp; 。この引数は、メッセージが処理されてとそれに設定されているかどうかを示す TRUE 既定。ハンドラー関数に、引数設定できます FALSE メッセージを処理していないことを示す。この場合、ATL はメッセージ マップ内でハンドラー関数を探しますしていきます。この引数を設定するには FALSE 、最初、メッセージへの応答にいくつかのアクションを実行でき、既定の処理や、メッセージの処理を完了するには、別のハンドラー関数を許可します。(&A)。
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メッセージ マップ識別子を呼び出す。