Tôi chưa viết gì với GDI một thời gian (và không bao giờ với GDI +), và tôi chỉ đang làm một dự án thú vị, nhưng với cuộc sống của tôi, tôi không thể cách để tăng gấp đôi bộ đệm GDI +GDI + đệm đôi trong 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);
}
Các công trình trên (mọi thứ hiển thị hoàn hảo), nhưng nó nhấp nháy. Nếu tôi thay đổi Graphics graphics(hdc);
thành Graphics graphics(hdcBuffer);
, tôi sẽ không thấy gì cả (mặc dù tôi nên bitblt'ing buffer-> hWnd hdc ở dưới cùng).
đường ống dẫn Thông điệp của tôi được thiết lập đúng (WM_PAINT gọi DrawStuff), và tôi buộc một thông điệp WM_PAINT mỗi vòng lặp chương trình bằng cách gọi RedrawWindow(window, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW);
Tôi có lẽ sẽ về một cách sai lầm để làm điều này, bất kỳ ý tưởng ? Các tài liệu MSDN là khó hiểu nhất.
Cảm ơn, tôi đã thêm hBmp = CreateCompatibleBitmap (hdc, WIDTH, HEIGHT); SelectObject (hdcBuffer, hBmp); để mã (và BitBlt hoạt động) nhưng nó vẫn nhấp nháy. –