gpt4 book ai didi

c# - 使用双缓冲和 FormBorderStyle.None 在 Windows 10 上重绘问题

转载 作者:太空宇宙 更新时间:2023-11-03 12:11:52 26 4
gpt4 key购买 nike

我有一个 Windows 窗体项目的问题,我只能在 Windows 10 机器上重现它(在 Windows 7 上它确实有效)。我认为我可以隔离问题的根源,也就是说,如果我打开双缓冲并将 FormBorderStyle 设置为 None,那么如果我调整表单的大小,例如在事件处理程序中,背景部分和某些控件未重绘。也是如此,有时它会起作用(五次一次)。

没有重新绘制它看起来如此(通常有点不同):

enter image description here

所以它应该是这样的:

enter image description here

要重现该问题,只需在表单中放置几个​​控件(可能数量也很重要),通过覆盖 CreateParamsFormBorderStyle=None< 来打开双缓冲(它可以使用另一种边框样式!)。

代码隐藏:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}

private bool small = true;
private void button1_Click(object sender, EventArgs e)
{
//toggle the form's size
Height = Height + 300*(small?-1:1);
small = !small;
}

private void button5_Click(object sender, EventArgs e)
{
Close();
}
}

问题:
它是 Windows 10 中 MS 的一个已知错误(或者可能是有意摆脱 windows 窗体 ;) )?
有什么想法吗?
必须是双缓冲和无边框。

更新:我有一个 Win 10 Pro 版本:1703;构建 15063.1155。
更新2:在Win 10专业版上测试:1709;构建 16299.492 - 同样的问题。

更新 3: 在 Win 10 家庭版上测试:1803 - 好多了(我需要几分钟的测试才能重现),但问题仍然存在。此测试是在另一台带有另一张显卡的计算机上完成的。

解决方法:
恐怕我必须采用这种方式作为解决方法 A: Remove the title bar in Windows Forms并将 FormBorderStyle 设置为 FixedToolWindow

最佳答案

对我来说,这看起来像是操作系统中的一个错误,但我已经找到了如何在不放弃 DoubleBufferingFormBorderStyle=None 的情况下让它工作。

如果窗口样式将被扩展

cp.ExStyle |= 0x00080000;   // Turn on WS_EX_LAYERED

然后一切都按预期工作。

关于c# - 使用双缓冲和 FormBorderStyle.None 在 Windows 10 上重绘问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51824224/

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