次の方法で共有


ビューの描画

アプリケーションのほぼすべての描画は、ビュー クラスでオーバーライドする必要があるの OnDraw ビューのメンバー関数で発生します。ただし、ビューによるユーザー入力の解釈で説明するマウス描画です)。OnDraw のオーバーライド:

  1. 指定したドキュメントのメンバー関数を呼び出してデータを取得します。

  2. デバイス コンテキスト オブジェクトのメンバー関数を呼び出してデータを表示しますが OnDrawフレームワークに渡す。

ドキュメント内のデータがなんらかの方法で変更されたときに変更を反映するように、再描画されなければなりません。 通常は、ユーザーがドキュメントに表示して変更を行った場合に発生します。 この場合、それ自体を更新するために、同じドキュメント内のすべてのビューに通知するようにドキュメントの UpdateAllViews メンバー関数を呼び出します。 UpdateAllViews は 各ビューに OnUpdate メンバー関数を呼び出します。 OnUpdate の既定の実装は、ビューのクライアント領域全体を無効化します。 ドキュメントの変更部分に割り当てられたクライアント領域だけを無効化するために、この関数をオーバーライドすることもできます。

クラス CDocumentUpdateAllViews のメンバー関数とクラス CViewOnUpdate メンバー関数はドキュメントの部分を変更したかに関する情報を渡すことができます。 この「情報」機能は再描画しなければビューがある領域を制限することができます。 OnUpdate は 2 個の「情報」の引数を受け取ります。 1 番目は、lHint、型 LPARAM、が 2 番 CObject型の pHint、目的のデータを渡すことができます CObject*、から派生されるオブジェクトへのポインターを渡すことができます。

ビューが無効になると、Windows は、WM_PAINT メッセージを送信します。 ビューの OnPaint のハンドラー関数は、メッセージにクラス CPaintDC のデバイス コンテキスト オブジェクトを作成して応答、ビューの OnDraw メンバー関数を呼び出します。 通常 OnPaint のオーバーライドのハンドラー関数を記述する必要はありません。

デバイス コンテキスト は表示やプリンターなどのデバイスに描画属性に関する情報を含む Windows のデータ構造です。 すべての描画呼び出しはデバイス コンテキスト オブジェクトを介して行われます。 画面に描画するために、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 Samplesを参照してください。

参照

関連項目

ビューの使い方