gpt4 book ai didi

c# - 在 C# Windows 窗体中显示 MDI 子窗体时如何避免闪烁?

转载 作者:行者123 更新时间:2023-11-30 16:28:51 25 4
gpt4 key购买 nike

当连接到 RDC 时,我观察到 mdi 子窗体背景图像的闪烁问题。我怎样才能避免它们?

最佳答案

我知道这是一个很晚的答案,但由于这里的所有答案(包括已接受的)都没有对闪烁做任何事情,我仍然喜欢发布对我有什么帮助

首先,我必须这样做

protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;

// reduce flickering when switching mdi child forms (see also WndProc)
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED (which is essentially double buffered)

return cp;
}
}

但这还不够,我也不得不这样做:

protected override void WndProc(ref Message msg)
{
const int WM_NCPAINT = 0x85;
const int WM_SIZE = 0x05;

// reduce flickering when switching mdi child forms (see also CreateParams)
if (msg.Msg == WM_NCPAINT)
{
if (this.WindowState == FormWindowState.Maximized)
return;
}

// reduce flickering when switching mdi child forms (see also CreateParams)
if (msg.Msg == WM_SIZE)
{
if (this.WindowState == FormWindowState.Maximized)
return;
}

base.WndProc(ref msg);
}

我在某个地方读到过,我可以通过简单地这样做来实现所有这些:

this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);

但当我这样做时,闪烁只会变得更糟。

无论如何,使用这个解决方案(至少在我的 mdi 项目中)我已经完全消除了在 mdi 子窗体之间切换时的闪烁。
希望这可以帮助任何寻找此问题的人。

关于c# - 在 C# Windows 窗体中显示 MDI 子窗体时如何避免闪烁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6814187/

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