次の方法で共有


複数のドキュメントの種類、ビュー、フレーム ウィンドウ

ドキュメント、ビュー、フレーム ウィンドウ間の標準リレーションシップについては、「 ドキュメント/ビューの作成」を参照してください。 多くのアプリケーションでは、1 つのドキュメントの種類 (ただし、その種類の複数の開いているドキュメント) がサポートされ、ドキュメント上の 1 つのビューと、ドキュメントごとに 1 つのフレーム ウィンドウのみがサポートされます。 ただし、一部のアプリケーションでは、これらの既定値の 1 つ以上を変更する必要があります。

詳しく知りたいこと

複数のドキュメントの種類

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

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

追加のドキュメント クラスについてフレームワークに通知するには、アプリケーション クラスの InitInstance オーバーライドで AddDocTemplate に 2 回目の呼び出しを追加する必要があります。 詳細については、「 ドキュメント テンプレート」を参照してください。

複数のビュー

多くのドキュメントでは 1 つのビューのみが必要ですが、1 つのドキュメントの複数のビューをサポートできます。 複数のビューを実装するために、ドキュメント オブジェクトはビューの一覧を保持し、ビューを追加および削除するためのメンバー関数を提供し、ドキュメントのデータがいつ変更されたかを複数のビューに知らせるための UpdateAllViews メンバー関数を提供します。

MFC では、同じドキュメントに複数のビューを必要とする 3 つの一般的なユーザー インターフェイスがサポートされています。 これらのモデルは次のとおりです。

  • 同じクラスのオブジェクトを個別の MDI ドキュメント フレーム ウィンドウに表示します。

    ドキュメントで 2 番目のフレーム ウィンドウの作成をサポートしたい場合があります。 ユーザーは、[新しいウィンドウ] コマンドを選択して、同じドキュメントのビューで 2 番目のフレームを開き、2 つのフレームを使用してドキュメントの異なる部分を同時に表示できます。 このフレームワークでは、MDI アプリケーションの [ウィンドウ] メニューの [新しいウィンドウ] コマンドをサポートします。このコマンドは、ドキュメントに添付された初期フレーム ウィンドウとビューを複製することによって行います。

  • 同じドキュメント フレーム ウィンドウ内の同じクラスのオブジェクトを表示します。

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

  • 1 つのフレーム ウィンドウでさまざまなクラスのオブジェクトを表示します。

    このモデルでは、分割ウィンドウのバリエーションで、複数のビューが 1 つのフレーム ウィンドウを共有します。 ビューは異なるクラスから構築され、各ビューは同じドキュメントを表示する異なる方法を提供します。 たとえば、一方のビューでは通常モードでワープロ ドキュメントが表示され、もう 1 つのビューではアウトライン モードで表示されます。 分割コントロールを使用すると、ユーザーはビューの相対サイズを調整できます。

次の図は、パーツ a、b、および c に分けて、上記の順序で 3 つのユーザー インターフェイス モデルを示しています。

3 つの複数のビュー ユーザー インターフェイスを示す図。
Multiple-View ユーザー インターフェイス

フレームワークは、分割ウィンドウで説明されているように、新しいウィンドウ コマンドを実装し、クラス CSplitterWnd を提供することによって、これらのモデルを提供します。 これらを開始点として使用して、他のモデルを実装できます。 ビュー、フレーム ウィンドウ、およびスプリッターのさまざまな構成を示すサンプル プログラムについては、 MFC サンプルを参照してください。

UpdateAllViewsの詳細については、MFC リファレンスおよび Scribble サンプルCView クラスを参照してください。

複数フレーム ウィンドウ

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

分割ウィンドウ

分割ウィンドウでは、ウィンドウは 2 つ以上のスクロール可能なウィンドウに分割されます。また、分割することもできます。 スクロール バーの横にあるウィンドウ フレーム内の分割コントロール (または "分割ボックス") を使用すると、ユーザーはウィンドウの相対サイズを調整できます。 各ペインは、同じドキュメント上のビューです。 "動的" スプリッターでは、図のパート b に示すように、ビューは同じクラス Multiple-View ユーザー インターフェイスです。 "静的" スプリッターでは、ビューは異なるクラスにすることができます。 両方の種類の分割ウィンドウは、 CSplitterWnd クラスでサポートされています。

同じクラスのビューを持つ動的分割ウィンドウを使用すると、ユーザーはウィンドウを複数のウィンドウに分割し、別のウィンドウをスクロールしてドキュメントのさまざまな部分を表示できます。 ユーザーはウィンドウの分割を解除して、追加のビューを削除することもできます。 Scribble サンプルに追加された分割ウィンドウの例を次に示します。 このトピックでは、動的分割ウィンドウを作成する方法について説明します。 動的分割ウィンドウは、図のパート b Multiple-View ユーザー インターフェイスに示されています。

さまざまなクラスのビューを含む静的分割ウィンドウは、ウィンドウを複数のペインに分割して開始します。それぞれの目的は異なります。 たとえば、Visual C++ ビットマップ エディターでは、イメージ ウィンドウに 2 つのペインが並べて表示されます。 左側のウィンドウには、ビットマップの等身大の画像が表示されます。 右側のウィンドウには、同じビットマップの拡大または拡大された画像が表示されます。 ペインは、ユーザーがドラッグしてペインの相対サイズを変更できる "分割バー" で区切ります。 図のパート c では、静的分割ウィンドウ Multiple-View ユーザー インターフェイスを示します。

詳細については、MFC リファレンスおよび MFC サンプルCSplitterWnd クラスを参照してください。

こちらも参照ください

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