CFrameWnd クラス
更新 : 2007 年 11 月
ウィンドウを管理するメンバと共に、Windows のシングル ドキュメント インターフェイス (SDI: Single Document Interface) のオーバーラップ フレーム ウィンドウまたはポップアップ フレーム ウィンドウの機能を提供します。
class CFrameWnd : public CWnd
解説
必要なフレーム ウィンドウを作成するには、CFrameWnd からクラスを派生します。アプリケーション固有のデータを格納するには、この派生クラスにメンバ変数を加えます。ウィンドウにメッセージが送られたときに行われる処理を指定するには、派生クラスにメッセージ処理メンバ関数とメッセージ マップを実装します。
フレーム ウィンドウを構築するには次の 3 つの方法があります。
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 を呼び出すことによって通知されます。
コマンド メッセージやほかの共通なフレーム通知メッセージ (これには、CWnd の OnSetFocus、OnHScroll、OnVScroll により処理されるメッセージが含まれます) は、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