相关疑难解决方法(0)

GDI + C++中的双缓冲

我有一段时间没有用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);
}
Run Code Online (Sandbox Code Playgroud)

以上作品(一切都完美呈现),但它闪烁.如果我改变Graphics graphics(hdc);Graphics graphics(hdcBuffer);,我什么也看不到(虽然我应该bitblt'ing的buffer->的hWnd HDC底部).

我的消息管道设置正确(WM_PAINT调用DrawStuff),我通过调用强制每个程序循环WM_PAINT消息 RedrawWindow(window, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW);

我可能会采取错误的方式来做这个,任何想法?MSDN文档充其量是神秘的.

c++ winapi gdi+

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×1

gdi+ ×1

winapi ×1