【问题标题】:WS_EX_COMPOSITED causes endless repainting when restoring form from minimize state从最小化状态恢复表单时,WS_EX_COMPOSITED 会导致无休止的重绘
【发布时间】:2018-08-08 08:47:53
【问题描述】:

Form 从最小化状态恢复时需要无限时间来重新绘制。
Form 是无边界的。我将覆盖 WndProcCreateParms
我正在将无边界 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_COMPOSITEDnobugz 不在那里,很奇怪。也许他在这里)。
  • 你可能在做一些奇怪的事情
  • 我在这里。多年来我看到的唯一快速重绘问题是 TabControl 有太多选项卡并显示滚动小部件。还原问题是非常不寻常的,它与第一次显示窗口时发生的情况并没有太大区别。推荐的调试技巧是,将表单中控件的Visible属性一一设置为False,以找出问题的根源。
  • @HansPassant 我有一个自定义控件(带边框的面板)似乎是导致问题的原因,我还注意到面板是绘制但透明的。我会在上面添加自定义控件的代码。

标签: c# winforms visual-studio-2017


【解决方案1】:

我遇到了和你一样的问题,我解决了这个将表单设计中的 TrasnsparencyKey 从黑色更改为另一种颜色但不是黑色的问题,尝试一种你不使用的颜色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多