我有一个相当复杂的用户绘制控件,它是双缓冲的。工作得非常好,除非另一个窗口移过它。这导致控件中的孔未被刷新。它没有正确地重新粉刷自己。我已经尝试了所有常用的修复程序......
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
没有帮助。作为一个淤泥,我在窗口中放置了一个Timer控件,并将其设置为每10毫秒刷新一次。这看起来非常狡猾。
如果我关闭双缓冲,控件会正确刷新,否则会因闪烁而搞砸。
编辑:用户控件中没有子窗口。使用图形方法在paint事件中绘制用户控件的整个表面。使用WS_EX_COMPOSITED修复了拖拽问题,但是当它们关闭时,tooptips会留下一个空白区域。到目前为止,唯一的解决方案是刷新计时器,我希望有人知道更多的Windows魔术。
答案 0 :(得分:2)
听起来你正在接近Winforms绘图的极限:)看看这里发布的这个问题的最佳答案:How to fix the flickering in User controls