如何为自定义表单的活动和非活动状态提供不同的边框颜色

时间:2017-07-27 07:25:24

标签: c# winforms

我正在开发一个自定义表单。

为此,我从System.Windows.Forms.Form类派生了类,并覆盖了WndProc(ref Message m)方法。

我已经处理了WM_NCPAINT以绘制标题栏,控制按钮(关闭,最小化,最大化按钮),边框和图标。

我需要为表单的活动和非活动状态提供不同的边框颜色。

为此,我使用了以下代码。

private void DrawBorder(Graphics g, Rectangle rect)
    {
        var borderColor = this.ContainsFocus ? Color.Blue : Color.Red;
        g.DrawRectangle(new Pen(borderColor), rect);
    }

当我放置两个表格(如下图所示)并通过鼠标点击从一个表单切换到另一个表单时,这提供了准确的输出。 enter image description here

但问题是当我最小化表单并通过单击任务栏上的表单图标来恢复它时,表单边框处于非活动颜色(Color.Red)。

我尝试覆盖OnActivated()方法,并在其中调用Refresh()UpdateStyles()方法。但这并没有提供任何结果。

请建议我实现我的要求。

提前致谢。

0 个答案:

没有答案