CFrameWnd クラス

更新 : 2007 年 11 月

ウィンドウを管理するメンバと共に、Windows のシングル ドキュメント インターフェイス (SDI: Single Document Interface) のオーバーラップ フレーム ウィンドウまたはポップアップ フレーム ウィンドウの機能を提供します。

class CFrameWnd : public CWnd

解説

必要なフレーム ウィンドウを作成するには、CFrameWnd からクラスを派生します。アプリケーション固有のデータを格納するには、この派生クラスにメンバ変数を加えます。ウィンドウにメッセージが送られたときに行われる処理を指定するには、派生クラスにメッセージ処理メンバ関数とメッセージ マップを実装します。

フレーム ウィンドウを構築するには次の 3 つの方法があります。

  • Create を使って直接構築します。

  • LoadFrame を使って直接構築します。

  • ドキュメント テンプレートを使って間接的に構築します。

Create または LoadFrame を呼び出す前に、C++ の new 演算子を使って、ヒープ領域にフレーム ウィンドウのオブジェクトを構築します。Create を呼び出す前に、フレームのアイコンやクラス スタイルを設定するために、AfxRegisterWndClass グローバル関数を使ってウィンドウ クラスを登録できます。

フレーム作成用のパラメータとして即値を渡すときは、Create メンバ関数を使用します。

LoadFrame で使う引数は Create よりも少なく、その代わりにフレームのタイトル、アイコン、アクセラレータ テーブル、メニューなどのリソースから、既定の値の大部分を補います。LoadFrame がアクセスできるように、これらのリソースすべてに同じリソース ID (たとえば、IDR_MAINFRAME) を付ける必要があります。

CFrameWnd オブジェクトがビューやドキュメントを持っていれば、プログラマが直接作成する代わりに、フレームワークが間接的に作成します。CDocTemplate オブジェクトが、フレームの作成、それに含まれるビューの作成、および適切なドキュメントとビューの関連付けを調整します。CDocTemplate のコンストラクタのパラメータには、関連する 3 つのクラス (ドキュメント、フレーム、ビュー) の CRuntimeClass を指定します。CRuntimeClass オブジェクトは、ユーザーにより指定されたとき (たとえば、[ファイル] メニューの [新規作成] コマンド、または MDI (マルチ ドキュメント インターフェイス) の [ウィンドウズ] メニューの [新しいウィンドウを開く] コマンドなど)、新しいフレームを動的に作成するために、フレームワークが使います。

上の RUNTIME_CLASS 機構を正しく動作させるには、CFrameWnd から派生したフレーム ウィンドウ クラスに、DECLARE_DYNCREATE を指定して宣言する必要があります。

CFrameWnd は、次に示す、Windows の一般的なアプリケーションでのメイン ウィンドウの機能を実行するように既定の実装を持っています。

  • CFrameWnd フレーム ウィンドウは、Windows のアクティブ ウィンドウ、または現在の入力フォーカスに依存しない現在アクティブなビューをトレースします。フレームが再度アクティブになるときは、アクティブなビューは CView::OnActivateView を呼び出すことによって通知されます。

  • コマンド メッセージやほかの共通なフレーム通知メッセージ (これには、CWndOnSetFocusOnHScrollOnVScroll により処理されるメッセージが含まれます) は、CFrameWnd フレーム ウィンドウによって現在アクティブなビューに送られます。

  • 現在のアクティブなビュー (または、MDI フレームの場合、アクティブな MDI 子フレーム ウィンドウ) はフレーム ウィンドウのキャプションを調べることができます。この機能は、フレーム ウィンドウの FWS_ADDTOTITLE スタイル ビットをオフにすることにより無効にできます。

  • CFrameWnd フレーム ウィンドウは、フレーム ウィンドウのクライアント領域内のコントロール バー、ビュー、その他の子ウィンドウの配置を管理します。フレーム ウィンドウは、またツール バーやほかのコントロール バーのボタンの更新を入力待ちの間に行うことができます。CFrameWnd フレーム ウィンドウは、ツール バー、ステータス バーのオン/オフを切り替えるコマンドを既定で実装しています。

  • CFrameWnd フレーム ウィンドウは、メインのメニュー バーを管理します。ポップアップ メニューが表示されたとき、フレーム ウィンドウは、どのメニュー項目を有効、無効にしたり、チェック マーク付けを行うかなどを決めるため、UPDATE_COMMAND_UI 機構を使います。メニュー項目を選択したときに、フレーム ウィンドウは、そのコマンドのメッセージ文字列をステータス バーに表示します。

  • CFrameWnd フレーム ウィンドウは、キーボード アクセラレータを自動的に変換するオプションのアクセラレータ テーブルを持ちます。

  • CFrameWnd フレーム ウィンドウは、コンテキスト ヘルプに使われる LoadFrame で設定されるオプションのヘルプ ID を持ちます。フレーム ウィンドウは、状況依存ヘルプ (Shift + F1) や印刷プレビューモードのようなセミモーダルな状況を主に調整します。

  • CFrameWnd フレーム ウィンドウは、ファイル マネージャからドラッグされ、フレーム ウィンドウにドロップされたファイルを開きます。ファイル拡張子が登録されていて、アプリケーションに関連付けられていると、フレーム ウィンドウは、ファイル マネージャ上でファイルを開くとき、または、Windows 関数の ShellExecute が呼ばれたときに発生する DDE (Dynamic Data Exchange) のオープン要求に応答します。

  • フレーム ウィンドウがアプリケーションのメイン ウィンドウ (つまり、CWinThread::m_pMainWnd) である場合は、アプリケーションが閉じたときに、変更されたドキュメントを保存するかどうかを OnClose または OnQueryEndSession で確認します。

  • フレーム ウィンドウがアプリケーションのメイン ウィンドウである場合は、WinHelp が動作している状態です。このアプリケーションのヘルプが起動されているとき、フレーム ウィンドウを閉じると、フレーム ウィンドウは WINHELP.EXE をシャット ダウンします。

C++ の delete 演算子でフレーム ウィンドウを破棄しないでください。代わりに、CWnd::DestroyWindow を使用します。CFrameWnd での PostNcDestroy の実装では、ウィンドウが破棄されるときに C++ オブジェクトが削除されます。フレーム ウィンドウを閉じるとき、既定の OnClose ハンドラは、DestroyWindow を呼び出します。

CFrameWnd の詳細については、「フレーム ウィンドウ」を参照してください。

必要条件

ヘッダー : afxwin.h

参照

参照

CWnd クラス

階層図

CWnd クラス

CMDIFrameWnd クラス

CMDIChildWnd クラス

CView クラス

CDocTemplate クラス

CRuntimeClass 構造体

その他の技術情報

CFrameWnd のメンバ