デバイス コンテキスト
デバイス コンテキストは、ディスプレイやプリンターなどのデバイスの描画属性についての情報を格納する、Windows のデータ構造体です。 すべての描画は、デバイス コンテキスト オブジェクトを使って呼び出されます。デバイス コンテキスト オブジェクトは、線、図形、およびテキストを描画するための Windows API をカプセル化したものです。 Windows では、デバイス コンテキストを使って、デバイスに依存しない描画ができます。 デバイス コンテキストを使用すると、画面、プリンター、またはメタファイルに対して描画できます。
CPaintDC オブジェクトには、BeginPaint 関数を呼び出し、デバイス コンテキストで描画し、そして、EndPaint 関数を呼び出すという、Windows の共通的な描画処理がカプセル化されています。 CPaintDC コンストラクターが BeginPaint を呼び出し、デストラクターが EndPaint を呼び出します。 簡略化されたプロセスを作成するのには、CDCオブジェクト、描画、および [破棄、CDCオブジェクト。 フレームワークでは、このプロセスでさえ、大部分が自動化されています。 特に、OnPrepareDC で用意した CPaintDC を OnDraw 関数に渡すと、描画以外の処理がすべて自動的に行われます。 OnDraw 関数から制御が返ると、オブジェクトがフレームワークによって破棄され、デバイス コンテキストが Windows に解放されます。
CClientDC オブジェクトには、ウィンドウのクライアント領域だけを表すデバイス コンテキストを使用する操作がカプセル化されています。 CClientDC コンストラクターは GetDC 関数を呼び出し、デストラクターは ReleaseDC 関数を呼び出します。 CWindowDC オブジェクトには、フレームを含むウィンドウ全体を表すデバイス コンテキストがカプセル化されています。
CMetaFileDC オブジェクトには、Windows のメタファイルへの描画がカプセル化されています。 CPaintDC はOnDraw に渡されますが、この場合は、OnPrepareDC を呼び出す必要があります。
マウスによる描画
フレームワーク プログラムで行う描画のほとんど (つまり、デバイス コンテキストの動作のほとんど) は、ビューの OnDraw メンバー関数によって実行されます。 ただし、デバイス コンテキスト オブジェクトは、ほかの目的にも使用できます。 たとえば、ビュー内でのマウス カーソルの軌跡を表示するには、OnDraw の呼び出しを待たずに、ビューに直接描画する必要があります。
このような場合は、CClientDC デバイス コンテキスト オブジェクトを使用して、ビューに直接描画します。