MSDNおよび多数の投稿では、BeginPaint/EndPaintをWM_PAINTで使用する必要があることが示唆されています。また、ペイントでダブルバッファリングを使用する場合は、WM_CREATEでDCとmemの割り当てを初期化し、それらのハンドルをWM_PAINTで再利用する方が理にかなっていることを示唆する場所を数多く見ました。
たとえば、BeginPaintを使用すると、よく次のように表示されます。
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
MemDC = CreateCompatibleDC(hdc);
bmp = CreateCompatibleBitmap(hdc, width, height);
oldbmp = SelectObject(MemDC,bmp);
g = new Graphics(MemDC);
//do paint on bmp
//blt bmp back to hdc
EndPaint(hWnd, &ps);
DeleteObject(bmp);
g->ReleaseHDC(MemDC);
DeleteDC(MemDC);
delete g;
初期化と破棄を保存するために、これを行うことは可能ですか?
case WM_CREATE:
hdc = GetDC(hWnd);
//create memDC and graphics object references ...
case WM_DESTROY
//delete memDC and graphics object references...
case WM_PAINT
BeginPaint(hWnd, &ps);
//use previously create mem and graphics object to paint
EndPaint(hWnd, &ps);
したがって、EndPaintを使用して更新領域をクリアするだけで、描画を前に作成したオブジェクトに委任します。