【发布时间】:2018-08-08 08:47:53
【问题描述】:
Form 从最小化状态恢复时需要无限时间来重新绘制。Form 是无边界的。我将覆盖 WndProc 和 CreateParms。
我正在将无边界 Form 从最小化状态恢复到正常状态。
我正在重写 CreateParms 方法来投影并停止闪烁。
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
m_aeroEnabled = CheckAeroEnabled();
if (!m_aeroEnabled)
cp.ClassStyle |= CS_DROPSHADOW;
cp.Style |= WS_MINIMIZEBOX;
cp.ExStyle |= 0x02000000; //WS_EX_COMPOSITED
cp.ClassStyle |= CS_DBLCLKS;
return cp;
}
}
删除 cp.ExStyle |= 0x02000000 后问题消失,但出现闪烁问题。
编辑: 添加似乎导致问题的自定义控件的代码:
public partial class BorderPanel : Panel
{
public BorderPanel()
{
}
protected override void OnPaint(PaintEventArgs pe)
{
ControlPaint.DrawBorder(pe.Graphics, this.ClientRectangle,
BorderColor, borderSize.Left, ButtonBorderStyle.Solid,
BorderColor, borderSize.Top, ButtonBorderStyle.Solid,
BorderColor, borderSize.Right, ButtonBorderStyle.Solid,
BorderColor, borderSize.Bottom, ButtonBorderStyle.Solid);
base.OnPaint(pe);
}
}
【问题讨论】:
-
Raymond Chen 对此:WS_EX_COMPOSITED(阅读 cmets)。另外:Can someone explain WS_EX_COMPOSITED(
nobugz不在那里,很奇怪。也许他在这里)。 -
你可能在做一些奇怪的事情
-
我在这里。多年来我看到的唯一快速重绘问题是 TabControl 有太多选项卡并显示滚动小部件。还原问题是非常不寻常的,它与第一次显示窗口时发生的情况并没有太大区别。推荐的调试技巧是,将表单中控件的Visible属性一一设置为False,以找出问题的根源。
-
@HansPassant 我有一个自定义控件(带边框的面板)似乎是导致问题的原因,我还注意到面板是绘制但透明的。我会在上面添加自定义控件的代码。
标签: c# winforms visual-studio-2017