No he escrito nada con GDI desde hace un tiempo (y nunca con GDI +), y estoy trabajando en un proyecto divertido, pero por mi vida, no me puedo imaginar cómo a doble buffer GDI +GDI + doble búfer en C++
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);
}
El anterior funciona (todo se traduce perfectamente), pero parpadea. Si cambio Graphics graphics(hdc);
a Graphics graphics(hdcBuffer);
, no veo nada (aunque debería estar bitblting el buffer-> hWnd hdc en la parte inferior).
Mi tubería mensaje está configurado correctamente (WM_PAINT llama DrawStuff), y estoy forzando un mensaje WM_PAINT cada bucle de programa llamando RedrawWindow(window, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW);
Probablemente voy por el camino equivocado para hacer esto, cualquier idea ? La documentación de MSDN es críptica en el mejor de los casos.
Gracias, he añadido hBMP = CreateCompatibleBitmap (HDC, anchura, altura); SelectObject (hdcBuffer, hBmp); al código (y el BitBlt funciona) pero todavía parpadea. –