ビューの描画
アプリケーションのほぼすべての描画は、ビュー クラスでオーバーライドする必要があるビューの OnDraw のメンバー関数で発生します。ただし、 ビューによってユーザー入力の解釈で説明するマウス描画です)。: OnDraw のオーバーライド
指定したドキュメントのメンバー関数を呼び出してデータを取得します。
デバイスコンテキスト オブジェクトのメンバー関数を呼び出してデータを表示するフレームワークが OnDrawに渡すこと。
ドキュメントのデータがなんらかの方法で変更するときに変更を反映するように、ビューで再描画する必要があります。通常は、ユーザーがドキュメントでビューによって変更を加える場合に発生します。この場合、自身を更新するために、同じドキュメントのすべてのビューに通知するようにドキュメントの UpdateAllViews のメンバー関数をダイヤルします。UpdateAllViews は、各ビュー OnUpdate のメンバー関数をダイヤルします。OnUpdate の既定の実装は、ビューのクライアント領域全体を無効化します。ドキュメントの変更部分に割り当てられたクライアント領域だけを無効化するために、この関数をオーバーライドすることもできます。
クラス CDocument の UpdateAllViews のメンバー関数とクラス CView の OnUpdate のメンバー関数は、ドキュメントの一部が変更されているかに関する情報を渡すことができます。このツール ヒント 「」の機能はビューが再描画する必要がある領域を制限できるようにします。OnUpdate は、 2 種類のツール ヒント 「」の引数を受け取ります。1 番目のは、 lHintの型 LPARAM、が 2 番、 pHintの型 CObjectを指定したデータを渡すことができます CObject*、から派生した任意のオブジェクトへのポインターを渡すことができます。
ビューが無効になると、ウィンドウは、 WM_PAINT のメッセージを送信します。ビューの OnPaint のハンドラー関数は、メッセージ クラスに CPaintDC のデバイスコンテキスト オブジェクトを作成して応答したり、ビューの OnDraw のメンバー関数をダイヤルします。通常 OnPaint のオーバーライドのハンドラー関数を記述する必要はありません。
デバイス コンテキスト は表示やプリンターなどのデバイスの描画の属性についての情報を含むウィンドウのデータ構造です。すべての描画の呼び出しはデバイスコンテキスト オブジェクトを介して行われます。画面に描画に、 OnDraw は CPaintDC のオブジェクトに渡されます。プリンターで描画に、現在のプリンター用に設定された CDC のオブジェクトに渡されます。
ビューで描画のためのコードはドキュメントに最初にポインターを取得し、デバイス コンテキストによって描画の呼び出しを行います。OnDraw の次の例は、プロセスを示すとおりです:
void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CString s = pDoc->GetData(); // Returns a CString
CRect rect;
GetClientRect(&rect);
pDC->SetTextAlign(TA_BASELINE | TA_CENTER);
pDC->TextOut(rect.right / 2, rect.bottom / 2, s, s.GetLength());
}
この例では、ドキュメント派生クラスのメンバーと GetData 関数を定義します。
どの文字列がドキュメントから派生するビューの中央の例が出力されます。OnDraw の呼び出しが画面の描画の場合は、 pDC で渡される CDC のオブジェクトはコンストラクターが既に BeginPaintを呼び出している CPaintDC です。関数を描画への呼び出しはデバイスコンテキストのポインターを通して行います。デバイス コンテキストと描画の呼び出しについては、 " MFC リファレンスと ペイン オブジェクトを使用のクラス CDC を参照してください。
OnDrawを作成する方法の例については MFC のサンプルを参照してください。