【问题标题】:Remove Title Bar from Windows Form (Windows 10 style)从 Windows 窗体中删除标题栏(Windows 10 样式)
【发布时间】:2016-12-23 07:07:11
【问题描述】:

我有一个非常简单的类,它继承自 System.Windows.Forms.Form 并删除了 WS_CAPTION 窗口样式。它可以在 Windows XP 和 7 中完美运行。在 Windows 10 中,仍然会绘制一段标题栏,并且在使用自定义标题栏控件时最终看起来很难看。

我知道可能有多种方法可以实现这种外观,但出于多种原因我选择了这种方法。我对替代方法不感兴趣——这不是我在这里提出问题的意图。

我的问题是,是什么导致了在 Windows 10 和 Windows 7 中的呈现方式之间存在这种差异?这种差异不仅仅是风格上的。即使 WS_CAPTION 标志已被移除,标题栏似乎仍在以某种容量呈现。

class BorderlessForm : System.Windows.Forms.Form
{
    protected override System.Windows.Forms.CreateParams CreateParams
    {
        get
        {
            var _CreateParams = base.CreateParams;
            _CreateParams.Style &= ~0x00C00000; // remove WS_CAPTION
            return _CreateParams;
        }
    }
}

Windows 7 屏幕截图(所需外观与 MSDN 描述一致):

Windows 10 屏幕截图(外观与 MSDN 描述不一致):

【问题讨论】:

  • 您正在使用 winforms,这是一种过时的演示技术,不太可能在更高版本的 Windows 中以可预测的方式工作。使用 WPF。
  • 向我展示有关已弃用 winforms 的 MSDN 文档,我会将其标记为答案...
  • @rory.ap 你是说 WPF 可以创建不受 Windows 样式和类似东西约束的窗口吗?来吧,它还是老旧的好 Windows 操作系统。
  • 你不应该这样做,窗口太高,使用 ControlBox = False 和 Text = ""。没有解决这个问题,这是一个非常奇怪的问题。我想我第一次看到这个问题是在 Win 10.0.10586 上。它看起来像 WM_NCCALCSIZE 没有正确处理,但它不是 Winforms 修补的。唔。下一个主要版本有望修复它,内部版本号 14393(又名周年纪念版)于 8 月 2 日发布。
  • @Hans 正是我希望这会发生的地方。我一直在使用 WmNCCalcSize 来寻找可能的覆盖修复,但它变得有点 hackish。 Controlbox = false 给出的结果与我在此处显示的结果相同。

标签: c# winforms


【解决方案1】:

您观察到的不是标题栏,而是大小边框。

我的问题是,是什么导致了 Windows 10 和 Windows 7 中的呈现方式之间存在这种差异?

原因是在不同版本的 Windows 上实现不同的外观。

如果您对如何在 Windows 10 上摆脱尺寸边框感兴趣:删除 WS_THICKFRAME 标志。

或者(也许更可取)您可以将表单的FormBorderStyle 更改为其他值。测试最适合您的方法。

但是,没有什么可以精确地定义整个表单边框。这取决于外观(主题)。从技术上讲,您不能期望表单的边框在不同的实现下不会有所不同。你只能通过测试来确保。

【讨论】:

    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多