Ich habe seit einiger Zeit nichts mehr mit GDI geschrieben (und nie mit GDI +), und ich arbeite gerade an einem lustigen Projekt, aber für das Leben von mir kann ich nicht verstehen heraus, wie Doppelpuffer GDI +GDI + double 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);
}
Das obige funktioniert (alles perfekt rendert), aber es flackert. Wenn ich Graphics graphics(hdc);
zu Graphics graphics(hdcBuffer);
ändere, sehe ich nichts (obwohl ich den Puffer-> hWnd hdc unten bittblingt).
Meine Nachricht Pipeline ordnungsgemäß eingerichtet (WM_PAINT ruft DrawStuff), und ich bin gezwungen eine WM_PAINT-Nachricht von jeder Programmschleife rufen RedrawWindow(window, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW);
Ich bin wahrscheinlich über den falschen Weg, dies zu tun, irgendwelche Ideen ? Die MSDN-Dokumentation ist bestenfalls kryptisch.
Dank, habe ich HBMP = CreateCompatibleBitmap (hdc, Breite, Höhe); SelectObject (hdcBuffer, hBmp); an den Code (und der BitBlt funktioniert), aber es flackert immer noch. –