绘图没有闪烁

ble*_*jzz 5 c++ winapi drawing flicker

我有一个用c ++开发的win32应用程序.应用程序使用基本形状(矩形)在窗口上绘制一些东西.使用InvalidateRect每20ms(50hz)重新绘制窗口.一切都运作良好,但绘图闪烁.我怎样才能防止闪烁?在c#中我通常使用双缓冲组件(如pictureBox),我怎样才能在使用win32的c ++中摆脱这个?

mac*_*die 6

您可以创建内存设备上下文,将这些形状绘制到它(就像您对窗口的设备上下文一样),然后在窗口无效时从窗口的设备上下文中进行blit.

您还需要在绘制发生之前禁用后台清除(适当地处理WM_ERASEBKGND窗口消息).

编辑:我偶然发现了一个关于GDI中无闪烁绘图的非常详尽的教程,它解释了Windows绘图的所有方面,并附带了示例.

  • 工作教程网址:https://www.catch22.net/tuts/win32/flicker-free-drawing (2认同)

Cha*_*had 5

您也可以在 Win32 中轻松实现双缓冲。假设您正在使用其设备上下文直接在窗口上进行绘画,请改为执行以下操作:

创建一个“内存”设备上下文并在该设备上下文上进行所有绘图,然后在适当的时候将窗口的无效部分复制到实际设备上下文中,使用BitBlt()创建一个“内存”设备上下文并在该设备上下文上进行所有绘图,然后在适当时使用该函数

这里有一个非常好的(尽管是高水平的)概述