CreateCompatibleDC

CreateCompatibleDCは、指定されたデバイスコンテキストと互換性のあるメモリ(論理)デバイスコンテキストを作成するWindowsAPI・・・。

CreateCompatibleDC 関数

これまで、ペン、ブラシ、フォントを作成し、それをデバイスコンテキストに選択させて描画関数を呼ぶことで描画することができた・・・。

実は、画像ファイルなどから読み込んだビットマップも描画することができるのだが、これまでとは勝手が違う・・・。

まずはCreateCompatibleDCでウィンドウなどの物理デバイスコンテキストと互換性のあるメモリ(論理)デバイスコンテキストを作成する必要がある・・・。
(わかりにくいけど、メモリ上に存在する見えないキャンバスみたいなものと考えるといい・・・。当然、これ自体はこのままでは描画されない・・・。)

とりあえず今回は、このメモリデバイスコンテキストを作成し、ハンドルを表示する・・・。

WM_PAINTで、

hDCは、BeginPaintで取得したウィンドウの物理デバイスコンテキストを格納するのに対し、hMemDCは、CreateCompatibleDCで作成したメモリデバイスコンテキストを格納する・・・。

引数には、元になるデバイスコンテキストhDCを指定する・・・。

今回は表示だけ・・・。

GetDCやBeginPaintはもともと存在する物理デバイスコンテキストを取得していたので、ReleaseDCやEndPaintで解放ということになっていた・・・。
しかし、CreateCompatibleDCは新規に作成したものなので、不要になったら破棄しないといけない・・・。

DeleteDCでhMemDCを破棄する・・・。

実行すると、

f:id:BG1:20150408111003p:plain

hMemDCの値が表示される・・・。

Sample/CreateCompatibleDC.cpp at master · bg1bgst333/Sample · GitHub