コマンドの振り分け (ルーティング)
コマンドを扱うには、[プロパティ] ウィンドウを使って、コマンドをハンドラー関数に対応付けるメッセージ マップを作成する必要があります。 大部分のコマンド ハンドラーも作成する必要があります。
通常、Windows メッセージはメイン フレーム ウィンドウに送られますが、コマンド メッセージはさらにほかのオブジェクトに転送されます。 フレームワークは、コマンドのハンドラーが存在すると思われるコマンド ターゲット オブジェクトに対して、標準シーケンスに従ってコマンドを送ります。 各コマンド ターゲット オブジェクトは、メッセージ マップを調べ、送られてきたメッセージを処理できるかどうかをチェックします。
コマンド ターゲット クラスによって、メッセージ マップを調べるタイミングが異なります。 通常、クラスは、コマンドを特定のオブジェクトに送って、そのオブジェクトに最初にコマンドを処理させようとします。 どのオブジェクトもコマンドを処理しないときは、元のクラスでメッセージ マップをチェックします。 元のクラスでもコマンドを処理できないときは、コマンドをさらにほかのコマンド ターゲットに送ります。 「標準のコマンド ルート」は、各クラスのチェック シーケンスを示しています。 コマンド ターゲットがコマンドを送る一般的な順序は、次のとおりです。
現在アクティブな子コマンド ターゲット オブジェクト
コマンド ターゲット自身
その他のコマンド ターゲット
このコマンドの転送処理は、コマンドに応答するハンドラーの処理に比べると、それほど負担になりません。 フレームワークは、ユーザーがユーザー インターフェイス オブジェクトを操作したときだけ、コマンドを生成するからです。
標準のコマンド ルート
コマンドを受信したオブジェクトの種類 . . |
コマンドを処理する機会が与えられるコマンド ターゲット オブジェクトとその順序 |
---|---|
MDI フレーム ウィンドウ (CMDIFrameWnd) |
|
ドキュメント フレーム ウィンドウ (CFrameWnd、CMDIChildWnd) |
|
ビュー |
|
ドキュメント |
|
ダイアログ ボックス |
|
前の表の右側の欄にほかのオブジェクト (ドキュメントなど) があるときは、そのオブジェクトのルーティングも調べてください。 たとえば、ビューはコマンドをドキュメントに転送しているので、"ドキュメント" の項のルーティングも参照してください。