デバイス コンテキスト
デバイス コンテキストは、ディスプレイやプリンターといったデバイスの描画属性に関する情報を保持する Windows のデータ構造体です。 すべての描画呼び出しは、線や図形、テキストを描画するための Windows API をカプセル化するデバイスコンテキスト オブジェクトを通じて行われます。 Windows では、デバイス コンテキストがあることで、デバイスに依存しない描画が可能となっています。 デバイス コンテキストを使用して、画面やプリンター、メタファイルへの描画を行うことができます。
CPaintDC オブジェクトは、Windows の共通の表現形式をカプセル化するものです。BeginPaint
関数を呼び出し、デバイス コンテキストに対して描画を行った後、EndPaint
関数を呼び出します。 CPaintDC
コンストラクターによって自動的に BeginPaint
が呼び出され、デストラクターによって EndPaint
が呼び出されます。 この単純化されたプロセスで、CDC オブジェクトの作成、描画、CDC
オブジェクトの破棄が行われます。 さらに、そのプロセスまで、大半がフレームワークによって自動化されています。 特に、OnDraw
関数には、(OnPrepareDC
によって) あらかじめ準備された CPaintDC
が渡されるので、開発者はそれに対して描画するだけで済みます。 このオブジェクトは、OnDraw
関数の呼び出しから制御が戻った時点で、フレームワークによって破棄され、基になるデバイス コンテキストは Windows に解放されます。
ウィンドウのクライアント領域のみを表すデバイス コンテキストの操作は、CClientDC オブジェクトによってカプセル化されています。 CClientDC
のコンストラクターが GetDC
関数を呼び出し、デストラクターが ReleaseDC
関数を呼び出します。 ウィンドウ全体 (そのフレームを含む) を表すデバイス コンテキストは、CWindowDC オブジェクトによってカプセル化されます。
Windows メタファイルへの描画は、CMetaFileDC オブジェクトによってカプセル化されます。 OnDraw
に渡される CPaintDC
とは対照的に、この場合は、開発者が自分で OnPrepareDC を呼び出す必要があります。
マウスの描画
フレームワーク プログラムにおけるほとんどの描画、つまり、デバイスコンテキストの大部分の作業は、ビューの OnDraw
メンバー関数で行います。 ただし、デバイスコンテキスト オブジェクトは他の目的に使用することもできます。 たとえば、ビューにおけるマウス移動の追跡フィードバックを提供するためには、OnDraw
の呼び出しを待たずに、ビューに対して直接描画を行う必要があります。
そのような場合、CClientDC デバイスコンテキスト オブジェクトを使用すれば、ビューに対して直接描画を行うことができます。