【发布时间】:2010-03-18 22:33:19
【问题描述】:
我已经有一段时间没有用 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);,我什么也看不到(尽管我应该在底部对缓冲区进行 bitblt->hWnd hdc)。
我的消息管道设置正确(WM_PAINT 调用 DrawStuff),我通过调用 RedrawWindow(window, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW); 在每个程序循环中强制发送 WM_PAINT 消息
我可能会采取错误的方式来做到这一点,有什么想法吗? MSDN 文档充其量是神秘的。
【问题讨论】: