次の方法で共有


複数のドキュメント タイプ、ビュー、フレーム ウィンドウ

更新 : 2007 年 11 月

ドキュメント、そのビュー、およびそのフレーム ウィンドウ間の標準的な関係については、「ドキュメントおよびビューの作成」を参照してください。多くのアプリケーションは、ドキュメントごとに 1 つのビューと 1 つのフレーム ウィンドウを備えた、1 つのドキュメント タイプをサポートします (1 つのドキュメント タイプのドキュメントを複数開くことはできます)。しかし、アプリケーションの中には、これらの既定値を 1 つ以上変更することが必要なものもあります。

さらに詳しくは次のトピックをクリックしてください

  • 複数のドキュメント タイプ

  • マルチ ビュー

  • 複数のフレーム ウィンドウ

  • 分割ウィンドウ

複数のドキュメント タイプ

MFC のアプリケーション ウィザードでは、ドキュメント クラスが 1 つ作成されます。しかし、場合によっては、複数のドキュメント タイプをサポートする必要があります。たとえば、ワークシート ドキュメントとグラフ ドキュメントが必要なアプリケーションなどです。各ドキュメント タイプは、独自のドキュメント クラスと、おそらくは独自のビュー クラスで表されます。[ファイル] メニューの [新規作成] を選択すると、サポートされているドキュメント タイプを一覧表示するダイアログ ボックスが表示されます。次に、ドキュメント タイプを選択すると、選択された型のドキュメントが作成されます。それぞれのドキュメント タイプは、自身のドキュメント テンプレート オブジェクトで管理されます。

追加のドキュメント クラスを作成する方法については、「クラスの追加」を参照してください。クラス タイプで CDocument を派生元として選択し、必要なドキュメント情報を指定します。次に、新しいクラスのデータを実装します。

追加したドキュメント クラスをフレームワークに認識させるには、アプリケーション クラスでオーバーライドした InitInstance に、AddDocTemplate への呼び出しをもう 1 つ追加します。詳細については、「ドキュメント テンプレートとドキュメント/ビューの作成手順」を参照してください。

マルチ ビュー

多くのドキュメントは 1 つのビューだけが必要ですが、1 つのドキュメントに対して複数のビューをサポートすることもできます。マルチ ビューの実装を支援するために、ドキュメント オブジェクトは、そのビューのリストを保持し、ビューの追加と削除用のメンバ関数を用意しています。ドキュメントのデータが変更されたときをマルチ ビューが認識できるように、UpdateAllViews メンバ関数も提供されています。

MFC は、1 つのドキュメントに対してマルチ ビューを必要とする、3 つの一般的なユーザー インターフェイスをサポートしています。3 つのモデルについて、次に説明します。

  • 同じクラスの複数のビュー オブジェクトが、それぞれ別個の MDI ドキュメント フレーム ウィンドウに表示されるモデル。

    ドキュメントで 2 番目のフレーム ウィンドウの作成をサポートする場合に、このモデルを使用します。ユーザーが [新規ウィンドウ] を選択すると、2 番目のフレーム ウィンドウが開き、同じドキュメントのビューが表示されます。これら 2 つのフレームを使うと、同じドキュメントの別の部分を同時に表示できます。フレームワークは、ドキュメントに結び付けられている最初のフレーム ウィンドウとビューを複製することで、MDI アプリケーション用の [ウィンドウ] メニューにある [新規ウィンドウ] をサポートします。

  • 同じクラスのビュー オブジェクトが、同じドキュメント フレーム ウィンドウに表示されるモデル。

    分割ウィンドウでは、1 つのドキュメント ウィンドウのビュー空間が、そのドキュメントの複数のビューに分割されます。フレームワークによって、同じビュー クラスから複数のビュー オブジェクトが作成されます。詳細については、「分割ウィンドウ」を参照してください。

  • 複数の、異なるクラスのビュー オブジェクトが、1 つのフレーム ウィンドウに表示されるモデル。

    このモデルでは、分割ウィンドウの変形である、マルチ ビューが 1 つのフレーム ウィンドウを共有します。マルチ ビューはさまざまなクラスから構築され、各ビューは、同じドキュメントを表示するために違った方法を用意します。たとえば、あるビューは通常モードのワード プロセッサ用ドキュメントを表示し、別のビューはそのドキュメントをアウトライン モードで表示します。分割線コントロールを使用すると、ユーザーは各ビューの相対的なサイズを調整できます。

次の図は、a、b、c の 3 つの部分から構成され、前述の 3 つのユーザー インターフェイス モデルを順に示しています。

マルチ ビューによるユーザー インターフェイス
マルチ ビュー ユーザー インターフェイス

フレームワークはこれらのモデルを準備するために、[新規ウィンドウ] を実装し、CSplitterWnd クラスを用意します。詳細については、「分割ウィンドウ」を参照してください。これらの項目を原型として利用することで、ほかのモデルを実装できます。ビュー、フレーム ウィンドウ、および分割線のさまざまな構成を示すサンプル プログラムについては、「MFC サンプル」を参照してください。

UpdateAllViews の詳細については、『MFC リファレンス』の CView クラスに関するトピック、および「SCRIBBLE サンプル : MFC MDI 描画アプリケーション」を参照してください。

複数のフレーム ウィンドウ

MDI アプリケーション用の [ウィンドウ] メニューの [新規ウィンドウ] を使うと、同一のドキュメントに 2 番目のフレーム ウィンドウを作成できます。詳細については、「マルチ ビューによるユーザー インターフェイス」の図の最初のモデルを参照してください。

分割ウィンドウ

分割ウィンドウでは、ウィンドウを 2 つ以上のスクロール可能なペインに分割できます。ウィンドウ フレームのスクロール バーの隣にある分割線コントロール ("分割ボックス") で、ペインの相対的なサイズを調節できます。各ペインは、同じドキュメントのビューです。"動的な" 分割ウィンドウでは、「マルチ ビューによるユーザー インターフェイス」の図の b 部分のように、どのビューも同じクラスに属します。"静的な" 分割ウィンドウでは、各ビューは異なるクラスでもかまいません。どちらの分割ウィンドウも、CSplitterWnd クラスでサポートされています。

動的な分割ウィンドウは、同じクラスの複数のビューから構成され、ウィンドウを複数のペインに分割できるため、各ペインをスクロールすることで、同じドキュメントの別の部分を表示できます。また、ウィンドウの分割を解除すると、追加したビューも削除できます。SCRIBBLE サンプルで追加した分割ウィンドウはこの例です。この例では、動的分割ウィンドウを作る方法を説明しています。動的分割ウィンドウについては、「マルチ ビューによるユーザー インターフェイス」の図の b 部分を参照してください。

異なるクラスのビューを表示できる静的分割ウィンドウを作成するには、まずウィンドウを目的別のペインに分割します。たとえば Visual C++ ビットマップ エディタでは、イメージ ウィンドウに 2 つのペインが横に並んで表示されます。左ペインには、等倍のビットマップが表示されます。右ペインには、同じビットマップの拡大イメージまたは縮小イメージが表示されます。各ペインは、ドラッグ操作でペインの相対的サイズを変更するための "分割バー" で分けられています。静的分割ウィンドウについては、「マルチ ビューによるユーザー インターフェイス」の図の c 部分を参照してください。

詳細については、『MFC リファレンス』の CSplitterWnd クラスに関するトピック、および「MFC サンプル」を参照してください。

参照

概念

ドキュメント/ビュー アーキテクチャ