【问题标题】:C++ Win32 GDI double bufferingC++ Win32 GDI 双缓冲
【发布时间】:2016-03-06 17:48:54
【问题描述】:

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

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

【问题讨论】:

    标签: c++ double gdi buffering


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2013-08-14
      • 2013-05-07
      • 2015-05-01
      • 1970-01-01
      • 2011-03-05
      相关资源
      最近更新 更多