Non ho scritto nulla con GDI per un po 'di tempo (e mai con GDI +), e sto solo lavorando a un progetto divertente, ma per la vita di me, non riesco a capire come raddoppiare tampone GDI +GDI + doppio buffering in 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);
}
I lavori precedenti (tutto rende perfettamente), ma sfarfalla. Se cambio Graphics graphics(hdc);
a Graphics graphics(hdcBuffer);
, non vedo nulla (anche se dovrei essere bitblt'ing il buffer-> hWnd hdc in fondo).
mio messaggio oleodotto è impostato correttamente (WM_PAINT chiama DrawStuff), e sto forzando un messaggio WM_PAINT ogni ciclo di programma chiamando RedrawWindow(window, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW);
Sono probabilmente andando circa il modo sbagliato di fare questo, tutte le idee ? La documentazione MSDN è criptica al meglio.
Grazie, ho aggiunto HBMP = CreateCompatibleBitmap (HDC, larghezza, altezza); SelectObject (hdcBuffer, hBmp); al codice (e il BitBlt funziona) ma sfarfalla ancora. –