C++ Win32 GDI double buffering

C++ Win32 GDI double buffering

本文关键字:buffering double GDI Win32 C++      更新时间:2023-10-16

您能否为此示例代码提供实现双缓冲的最简单方法(以防止闪烁):

HWND hwnd = FindWindow(0, "Untitled - Notepad");
HDC hDC_Desktop = GetDC(hwnd);
...
        while( )
        {
                    RECT rect = { 10, 10, 10 + 50, 10 + 50 };
                    FillRect(hDC_Desktop, &rect, ColorBrush);
                    InvalidateRect (hwnd, NULL, TRUE);
        }

它"闪烁"的原因是目标窗口失效并且正在重新绘制。 由于它不是您的窗口 - 您不一定可以控制它。

如果这是您自己的窗口,则有一个简单的策略可以加快绘制速度并减少闪烁:使用内存 DC 绘制和捕获WM_ERASEBKGND以抑制背景重绘。

深入解释和修复策略(在应用程序的窗口中):http://www.catch22.net/tuts/win32/flicker-free-drawing

如果您打算在另一个应用程序上绘制,我是否可以建议在该应用程序之上创建一个窗口并在此基础上绘制。