C ++ Win32 GDI双缓冲

时间:2016-03-06 17:48:55

标签: c++ double gdi buffering

你能给出这个示例代码实现双缓冲的最简单方法(防止闪烁):

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);
        }

1 个答案:

答案 0 :(得分:1)

它“闪烁”的原因是因为目标窗口失效并且正在重绘。因为它不是你的窗口 - 你不一定能控制它。

如果这是你的拥有窗口,有一个简单的策略可以加快绘图速度并减少闪烁:使用Memory DC绘制并捕获WM_ERASEBKGND以抑制背景重绘。

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

如果您的目的是在另一个应用程序上绘图,我是否可以建议在该应用程序之上创建一个窗口并使用该窗口。

相关问题