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