ble*_*jzz 5 c++ winapi drawing flicker
我有一个用c ++开发的win32应用程序.应用程序使用基本形状(矩形)在窗口上绘制一些东西.使用InvalidateRect每20ms(50hz)重新绘制窗口.一切都运作良好,但绘图闪烁.我怎样才能防止闪烁?在c#中我通常使用双缓冲组件(如pictureBox),我怎样才能在使用win32的c ++中摆脱这个?
mac*_*die 6
您可以创建内存设备上下文,将这些形状绘制到它(就像您对窗口的设备上下文一样),然后在窗口无效时从窗口的设备上下文中进行blit.
您还需要在绘制发生之前禁用后台清除(适当地处理WM_ERASEBKGND窗口消息).
编辑:我偶然发现了一个关于GDI中无闪烁绘图的非常详尽的教程,它解释了Windows绘图的所有方面,并附带了示例.
Cha*_*had 5
您也可以在 Win32 中轻松实现双缓冲。假设您正在使用其设备上下文直接在窗口上进行绘画,请改为执行以下操作:
创建一个“内存”设备上下文并在该设备上下文上进行所有绘图,然后在适当的时候将窗口的无效部分复制到实际设备上下文中,使用BitBlt()创建一个“内存”设备上下文并在该设备上下文上进行所有绘图,然后在适当时使用该函数
BitBlt()
这里有一个非常好的(尽管是高水平的)概述。
归档时间:
14 年,5 月 前
查看次数:
7961 次
最近记录:
7 年,9 月 前