コマンドの操作は、コマンドとそのハンドラー関数 ( MFC クラス ウィザードを使用するタスク) 間のメッセージ マップ接続の作成に限定されます。 コマンド ハンドラーのコードも記述する必要があります。
通常、Windows メッセージはメイン フレーム ウィンドウに送信されますが、コマンド メッセージは他のオブジェクトにルーティングされます。 フレームワークは、コマンドターゲット オブジェクトの標準シーケンスを介してコマンドをルーティングします。そのうちの 1 つは、コマンドのハンドラーが必要です。 各コマンド ターゲット オブジェクトは、メッセージ マップをチェックして、受信メッセージを処理できるかどうかを確認します。
コマンド ターゲット クラスが異なると、それぞれのメッセージ マップが異なる時刻にチェックされます。 通常、クラスはコマンドを他の特定のオブジェクトにルーティングして、コマンドで最初の機会を与えます。 これらのオブジェクトのいずれもコマンドを処理しない場合、元のクラスは独自のメッセージ マップをチェックします。 その後、ハンドラー自体を指定できない場合は、さらに多くのコマンド ターゲットにコマンドをルーティングできます。 次の表 の標準コマンド ルート は、各クラスがこのシーケンスを構成する方法を示しています。 コマンド ターゲットがコマンドをルーティングする一般的な順序は次のとおりです。
現在アクティブな子コマンド ターゲット オブジェクトへ。
それ自体。
他のコマンド ターゲットへ。
このルーティング メカニズムのコストは、コマンドに対するハンドラーの処理と比較して、ルーティングのコストが低くなります。 フレームワークでは、ユーザーがユーザー インターフェイス オブジェクトと対話するときにのみコマンドが生成されることに注意してください。
標準コマンド ルート
この型のオブジェクトがコマンドを受け取るとき。 . . | これにより、それ自体と他のコマンド ターゲット オブジェクトに、次の順序でコマンドを処理する機会が与えられます。 |
---|---|
MDI フレーム ウィンドウ (CMDIFrameWnd ) |
1. アクティブ CMDIChildWnd 2. このフレーム ウィンドウ 3. アプリケーション ( CWinApp オブジェクト) |
ドキュメント フレーム ウィンドウ (CFrameWnd 、 CMDIChildWnd ) |
1. アクティブビュー 2. このフレーム ウィンドウ 3. アプリケーション ( CWinApp オブジェクト) |
表示 | 1. このビュー 2. ビューに添付されたドキュメント |
ドキュメント | 1. このドキュメント 2. ドキュメントに添付されたドキュメント テンプレート |
ダイアログ ボックス | 1. このダイアログ ボックス 2. ダイアログ ボックスを所有するウィンドウ 3. アプリケーション ( CWinApp オブジェクト) |
前の表の 2 番目の列の番号付きエントリで、ドキュメントなどの他のオブジェクトが言及されている場合は、最初の列の対応する項目を参照してください。 たとえば、ビューがドキュメントにコマンドを転送する 2 番目の列を読み取る場合は、最初の列の "Document" エントリを参照してルーティングをさらに進めます。