メニュー、コントロール バー、およびアクセラレータの管理

フレーム ウィンドウは、メニュー、ツール バーのボタン、ステータス バー、アクセラレータなど、ユーザー インターフェイス オブジェクトの更新を管理します。 MDI アプリケーションにおけるメニュー バーの共有もその管理の対象となります。

メニューの管理

フレーム ウィンドウは、ユーザー インターフェイス オブジェクトを更新する方法についての記事で説明した ON_UPDATE_COMMAND_UI メカニズムを使用して、ユーザーインターフェイス項目の更新に関与します。 ツール バーなどのコントロール バー上のボタンは、アイドル ループ中に更新されます。 メニュー バーにあるドロップダウン メニュー内のメニュー項目は、メニューが展開される直前に更新されます。

MDI アプリケーションの場合、メニュー バーとキャプションが MDI フレーム ウィンドウによって管理されます。 MDI フレーム ウィンドウは、アクティブな MDI 子ウィンドウが存在しないときにメニュー バーとして使用される既定のメニューを 1 つ所有します。 アクティブな子が存在するときは、MDI フレーム ウィンドウのメニュー バーが、アクティブな MDI 子ウィンドウのメニューによって引き継がれます。 MDI アプリケーションが複数の種類のドキュメント (グラフ、ワークシートど) をサポートしている場合、その種類ごとに固有のメニューがメニュー バーに配置され、メイン フレーム ウィンドウのキャプションも変化します。

MDI アプリケーションに表示される [ウィンドウ] メニューの標準コマンドには、CMDIFrameWnd に既定の実装が用意されています。 具体的には、現在のドキュメントに新しいフレーム ウィンドウとビューを作成する [新しいウィンドウ] コマンド (ID_WINDOW_NEW) が実装されています。 高度なカスタマイズが必要な場合のみ、これらの実装をオーバーライドする必要があります。

ドキュメントの種類が同じである複数の MDI 子ウィンドウは、メニュー リソースを共有します。 同じドキュメント テンプレートによって作成された複数の MDI 子ウィンドウは、いずれも同じメニュー リソースを使用できるので、Windows のシステム リソースが無駄に消費されることはありません。

ステータス バーの管理

フレーム ウィンドウはさらに、そのクライアント領域内にステータス バーを配置し、ステータス バーのインジケーターを管理します。 ステータス バーにコマンド情報を表示する方法に関するページで説明されているように、フレーム ウィンドウは、ユーザーがメニュー項目やツール バーのボタンを選択したときに、必要に応じてステータス バー内のメッセージ エリアをクリアして更新し、プロンプト文字列を表示します。

アクセラレータの管理

各フレーム ウィンドウは、キーボードのアクセラレータ変換を自動的に行うオプションのアクセラレータ テーブルを保持します。 このメカニズムにより、メニュー コマンドを呼び出すアクセラレータ キー (ショートカット キーとも呼ばれます) を簡単に定義できるようになっています。

関連項目

フレーム ウィンドウの使用