![]() |
1
11
我也遇到过类似的问题,尽管我有一个业主绘制的列表框。我的解决方案是使用Bufferedgraphics对象。如果您的列表不是由所有者绘制的,您的里程数可能会因此解决方案而异,但它可能会给您一些启发。 我发现,除非我补充了textformFlags.PreserveGraphicTranslateTransform,否则textfrender很难呈现到正确的位置。另一种方法是使用p/invoke调用bitblt直接在图形上下文之间复制像素。我把这当作两害之轻。
这个
|
![]() |
2
2
您可以检查切换到带有复选框的ListView控件是否可以改善问题。处理起来并不容易(但是,WinForms列表框也不是天才的一笔),我发现它的调整行为
或者,您可以尝试通过重写父窗体背景绘图来减少闪烁-要么提供一个空心画笔,要么重写
我已经在Win32应用程序中成功地使用了它,但是我不知道窗体控件是否添加了一些它自己的魔力,使其无法正常工作。 |
![]() |
3
0
这通常通过向控件发送wm_setredraw消息来处理。
参见: WM_SETREDRAW reference at Microsoft 固定链路 如果其他人在.NET下使用了Windows邮件,请根据需要更新此文章。 |
![]() |
4
0
虽然没有解决闪烁的特定问题,但对于此类问题通常有效的方法是缓存列表框项的最小状态。然后通过对每个项执行一些计算来确定是否需要重新绘制列表框。只有在至少需要更新一个项时才更新列表框(当然,在下一个循环的缓存中保存这个新状态)。 |
|
user3403621 · 如何在C++Builder 2010中实现双缓冲? 11 年前 |