コマンドの振り分け (ルーティング)

更新 : 2007 年 11 月

コマンドを扱うには、[プロパティ] ウィンドウを使って、コマンドをハンドラ関数に対応付けるメッセージ マップを作成する必要があります。大部分のコマンド ハンドラも作成する必要があります。

通常、Windows メッセージはメイン フレーム ウィンドウに送られますが、コマンド メッセージはさらにほかのオブジェクトに転送されます。フレームワークは、コマンドのハンドラが存在すると思われるコマンド ターゲット オブジェクトに対して、標準シーケンスに従ってコマンドを送ります。各コマンド ターゲット オブジェクトは、メッセージ マップを調べ、送られてきたメッセージを処理できるかどうかをチェックします。

コマンド ターゲット クラスによって、メッセージ マップを調べるタイミングが異なります。通常、クラスは、コマンドを特定のオブジェクトに送って、そのオブジェクトに最初にコマンドを処理させようとします。どのオブジェクトもコマンドを処理しないときは、元のクラスでメッセージ マップをチェックします。元のクラスでもコマンドを処理できないときは、コマンドをさらにほかのコマンド ターゲットに送ります。「標準のコマンド ルート」は、各クラスのチェック シーケンスを示しています。コマンド ターゲットがコマンドを送る一般的な順序は、次のとおりです。

  1. 現在アクティブな子コマンド ターゲット オブジェクト

  2. コマンド ターゲット自身

  3. その他のコマンド ターゲット

このコマンドの転送処理は、コマンドに応答するハンドラの処理に比べると、それほど負担になりません。フレームワークは、ユーザーがユーザー インターフェイス オブジェクトを操作したときだけ、コマンドを生成するからです。

標準のコマンド ルート

コマンドを受信したオブジェクトの種類 . .

コマンドを処理する機会が与えられるコマンド ターゲット オブジェクトとその順序

MDI フレーム ウィンドウ (CMDIFrameWnd)

  1. アクティブな CMDIChildWnd

  2. フレーム ウィンドウ

  3. アプリケーション (CWinApp オブジェクト)

ドキュメント フレーム ウィンドウ (CFrameWndCMDIChildWnd)

  1. アクティブなビュー

  2. フレーム ウィンドウ

  3. アプリケーション (CWinApp オブジェクト)

ビュー

  1. ビュー

  2. ビューに割り当てられたドキュメント

ドキュメント

  1. ドキュメント

  2. ドキュメントに割り当てられたドキュメント テンプレート

ダイアログ ボックス

  1. ダイアログ ボックス

  2. ダイアログ ボックスのオーナー ウィンドウ

  3. アプリケーション (CWinApp オブジェクト)

前の表の右側の欄にほかのオブジェクト (ドキュメントなど) があるときは、そのオブジェクトのルーティングも調べてください。たとえば、ビューはコマンドをドキュメントに転送しているので、"ドキュメント" の項のルーティングも参照してください。

参照

概念

フレームワークがハンドラを呼び出す方法