次の方法で共有


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

ドキュメント、そのビュー、およびそのフレーム ウィンドウ間の標準的な関係については、「ドキュメントおよびビューの作成」を参照してください。 多くのアプリケーションは、ドキュメントごとに 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 サンプル」を参照してください。

参照

概念

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