Я давно ничего не писал с GDI (и никогда с GDI +), и я просто работаю над забавным проектом, но я не могу понять, как создать двойной буфер GDI +
void DrawStuff(HWND hWnd) {
HDC hdc;
HDC hdcBuffer;
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
hdcBuffer = CreateCompatibleDC(hdc);
Graphics graphics(hdc);
graphics.Clear(Color::Black);
// drawing stuff, i.e. bunnies:
Image bunny(L"bunny.gif");
graphics.DrawImage(&bunny, 0, 0, bunny.GetWidth(), bunny.GetHeight());
BitBlt(hdc, 0,0, WIDTH , HEIGHT, hdcBuffer, 0,0, SRCCOPY);
EndPaint(hWnd, &ps);
}
Выше работает (все отлично), но мерцает. Если я изменю Graphics graphics(hdc);
на Graphics graphics(hdcBuffer);
, я ничего не вижу (хотя я должен был побитовать буфер -> hWnd hdc внизу).
Мой конвейер сообщений настроен правильно (WM_PAINT вызывает DrawStuff), и я заставляю сообщение WM_PAINT каждый цикл программы, вызывая RedrawWindow(window, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW);
Я, наверное, иду по неправильному пути, есть идеи? Документация MSDN в лучшем случае загадочна.