gpt4 book ai didi

winforms - 如果图像是背景,TabControl 会闪烁

转载 作者:行者123 更新时间:2023-12-01 09:09:15 24 4
gpt4 key购买 nike

我注意到,如果我在具有图像背景的面板中有一个 TabControl,当鼠标悬停在一个选项卡上时,它会闪烁并重绘。是否有解决方法来防止这种情况发生?

最佳答案

我看到了。发生这种情况是因为 TabControl 部分通过要求父控件在其自己的窗口内绘制自身来绘制自身。这是必要的,因为选项卡没有覆盖控件的整个宽度,它们“伸出”。如果 BackgroundImage 的绘制速度很慢,您会看到正在绘制的背景和在其上绘制的选项卡之间闪烁。

这将很难解决,TabControl 不支持任何类型的双缓冲。您只能通过使 BackgroundImage 有效地绘制来最小化效果。为此,您需要使图像的大小与面板的 ClientSize 完全相同,这样就不必调整图像的大小。并使用 PixelFormat32bppPArgb 像素格式创建该位图,它通常比其他格式快 10 倍。

有一种 Elixir ,窗口有一个样式标志,可以为整个窗口(包括其子控件)启用双缓冲。自 XP 以来受支持,但报告了一些副作用。将此代码粘贴到您的表单中,它修复了 TabControl 闪烁:

    protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}

但请注意,TabControl 的视觉样式渲染器与此样式标志有一个相当大的不兼容。如果您的选项卡溢出并且您看到选择箭头,那么它会变得很糟糕并开始一遍又一遍地渲染选项卡,从而产生非常高的闪烁率。

关于winforms - 如果图像是背景,TabControl 会闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3111841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com