ドキュメント/ビュー アーキテクチャの全体像
標準的な MFC アプリケーションでは、ドキュメントとビューが対になっています。 データはドキュメントに格納されますが、ビューには、そのデータへの特権アクセスがあります。 ドキュメントとビューが分離されていることで、データの格納と保守がその表示から切り離されます。
ビューからドキュメント データへのアクセス
ビューから、そのドキュメントのデータにアクセスする際は、ドキュメントへのポインターを返す GetDocument 関数を使用するか、ビュー クラスをドキュメント クラスの C++ friend
にします。 ビューは、描画または他のなんらかの方法で操作する準備が整うと、そのデータ アクセスを使用してデータを取得します。
たとえば、ビューの OnDraw メンバー関数から GetDocument
を使用してドキュメントのポインターを取得します。 その後、そのポインターを使用して、ドキュメントの CString
データ メンバーにアクセスします。 ビューは、その文字列を TextOut
関数に渡します。 この例のコードは、「ビューの描画」でご覧いただけます。
ビューへのユーザー入力
ビューは、その中で受け取ったマウス クリックをデータの選択または編集として解釈することもあります。 同様に、キーボード操作をデータ入力または編集として解釈することもあります。 テキストを管理するビューに対し、ユーザーが文字列を入力するとします。 ビューは、ドキュメントへのポインターを取得し、それを使って新しいデータをドキュメントに渡します。そしてドキュメントは、受け取ったデータをなんらかのデータ構造に格納します。
同じドキュメントの複数のビューの更新
テキスト エディターのスプリッター ウィンドウなど、同じドキュメントの複数のビューを備えたアプリケーションでは、ビューがまず新しいデータをドキュメントに渡します。 その後、ドキュメントの UpdateAllViews メンバー関数を呼び出すと、ビューを更新して新しいデータを反映するよう、ドキュメントのすべてのビューに伝えられます。 これによってそれらのビューが同期されます。