コマンド ルーティング
コマンドを使用するには、MFC クラス ウィザードを使って、コマンドとハンドラー関数を対応付けるメッセージ マップを作成する必要があります。 コマンド ハンドラーのコードも記述する必要があります。
通常、Windows メッセージはメイン フレーム ウィンドウに送信されますが、コマンド メッセージはさらに他のオブジェクトにルーティングされます。 フレームワークは、コマンド ターゲット オブジェクトの標準シーケンスに従って、コマンドのハンドラーが存在すると思われるオブジェクトの 1 つにコマンドをルーティングします。 各コマンド ターゲット オブジェクトは、受信したメッセージを処理できるかどうかをメッセージ マップで確認します。
メッセージ マップを確認するタイミングは、コマンド ターゲット クラスによって異なります。 通常、クラスは、コマンドを最初に特定の他のオブジェクトにルーティングして、そのオブジェクトでコマンドを処理しようとします。 どのオブジェクトもコマンドを処理できない場合、元のクラスは独自のメッセージ マップをチェックします。 その後、元のクラスがハンドラー自体を提供できない場合は、そのコマンドをさらに他のコマンド ターゲットにルーティングします。 以下の「 標準のコマンド ルート 」の表は、各クラスのチェック シーケンスを示しています。 コマンド ターゲットがコマンドをルーティングする一般的な順序は、次のとおりです。
現在アクティブな子コマンド ターゲット オブジェクト
コマンド ターゲット自身
その他のコマンド ターゲット
このルーティング メカニズムは、コマンドに応答するハンドラーの処理に比べると、それほど負担になりません。 フレームワークでコマンドが生成されるのは、ユーザーがユーザー インターフェイス オブジェクトを操作したときだけです。
標準のコマンド ルート
| コマンドを受信したオブジェクトの種類 . . | コマンドを処理する機会が与えられるコマンド ターゲット オブジェクトとその順序 |
|---|---|
MDI フレーム ウィンドウ (CMDIFrameWnd) |
1. アクティブ CMDIChildWnd2. このフレーム ウィンドウ 3. アプリケーション ( CWinApp オブジェクト) |
ドキュメント フレーム ウィンドウ (CFrameWnd、CMDIChildWnd) |
1. アクティブ ビュー 2. このフレーム ウィンドウ 3. アプリケーション ( CWinApp オブジェクト) |
| 表示 | 1. このビュー 2. ビューにアタッチされたドキュメント |
| マニュアル名の正式名称 | 1. このドキュメント 2. ドキュメントにアタッチされたドキュメント テンプレート |
| ダイアログ ボックス | 1. このダイアログ ボックス 2. ダイアログ ボックスを所有するウィンドウ 3. アプリケーション ( CWinApp オブジェクト) |
前の表の右側の列に他のオブジェクト (ドキュメントなど) が示されている場合は、左側の列の対応する項目を確認してください。 たとえば、右側の列を見ると、ビューがコマンドをドキュメントに転送していることがわかるので、左側の列の「ドキュメント」のルーティングも参照してください。