デバイス コンテキスト
デバイス コンテキストは、ディスプレイやプリンタなどのデバイスの描画属性についての情報を格納する、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 デバイス コンテキスト オブジェクトを使用して、ビューに直接描画します。
