Win32 Programming: ReDraw
(Hirofumi Fujii (c), 14-July-1998)
Window 画面での描画が複雑な場合、再描画を行うのに memory device context
がよく使われる。これは、描画イメージをメモリー上に展開しておき、再描画
は、メモリーから対応する領域をコピーするという手法である。
これを行うには、最初(例えば WM_CREATE message の処理など)に
CreateCompatibleDC と CreateCompatibleBitmap を使って memory device
context を生成し、WM_PAINT では BitBlt を使って memory device context
からコピーする。
大雑把には、次のようなコードになる(このコードでは、memory device context
と window のサイズは同じであると仮定している。また、エラーチェックは
一切行っていない)。
HDC hdc, mdc;
HBITMAP hbitmap;
PAINTSTRUCT ps;
int xsize, ysize;
case WM_CREATE:
hdc = GetDC( hwnd );
mdc = CreateCompatibleDC( hdc );
hbitmap = CreateCompatibleBitmap( hdc, xsize, ysize );
SelectObject( mdc, hbitmap );
PatBlt( mdc, 0, 0, xsize, ysize, WHITENESS );
ReleaseDC( hwnd, hdc );
break;
case WM_PAINT:
BeginPaint( hwnd, &ps );
BitBlt( ps.hdc, 0, 0, xsize, ysize, mdc, 0, 0, SRCCOPY );
EndPaint( hwnd, &ps );
break;
case WM_DESTROY:
DeleteDC( mdc );
DeleteObject( hbitmap );
break;