Win32でC++でプロジェクトを実行しているときに描画されるイメージをバッファリングしようとしましたが、その上に正しいビットマップを含む黒い画面が表示されます。これはまた、私のWM_MOUSEMOVE条件を引き起こしています。これは、ビットマップを描画しないようにカーソルとともにビットマップをドラッグします。ペイントのコードは以下の通りです:paint()はWM_PAINTの下のwndprocで呼び出されます。scrollはこれまで使われていなかったスクロールバーの位置です。Win32ダブルバッファリング描画の黒い背景
int paint(HWND hWnd, HINSTANCE hInst, RECT clientRect, std::vector<Measure> *measures, int scroll)
{
int x = 90;
hdc = BeginPaint(hWnd, &ps);
hdcmem = CreateCompatibleDC(hdc);
HBITMAP hbmScreen = CreateCompatibleBitmap(hdc, clientRect.right, clientRect.bottom);
SelectObject(hdcmem,hbmScreen);
/*these functions just create the bitmaps into hdcmem*/
drawStaff(hWnd, hInst, clientRect, x, 0);
drawKey(hWnd, hInst, clientRect, x, (*measures)[0], 0);
drawTime(hWnd, hInst, clientRect, x, (*measures)[0], 0);
drawNotes(hWnd, hInst, clientRect, measures, x);
BitBlt(hdc, 0, 0, clientRect.right, clientRect.bottom, hdcmem, 0, 0, SRCCOPY);
ReleaseDC(hWnd, hdcmem);
return 0;
}
ペイントしている時にバックバッファをリメイクするべきではなく、 'WM_CREATE'(と' WM_SIZE')で一度作って 'SetWindowLongPtr(GWLP_USERDATA)'を使って 'HWND'に貼り付けてください。 – Necrolis
リソースリークがあります。この関数から戻る前に、hdcmemでDeleteObjectを呼び出すことを忘れています。 – selbie
また、EndPaintを呼び出すこともできません。 – selbie