从Windows窗体(Windows 10样式)中删除标题栏

问题描述:

我有一个非常简单的类,它从System.Windows.Forms.Form继承并删除WS_CAPTION窗口样式。它完美地运行在Windows XP中。在Windows 10中,一段标题栏仍然被绘制,并且在使用自定义标题栏控件时,它看起来很难看。从Windows窗体(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; 
     } 
    } 
} 

视窗7的屏幕截图(期望的外观和MSDN描述一致):

enter image description here

视窗10的屏幕截图(不期望的外观不一致MSDN说明):

enter image description here

+0

您正在使用winforms,这是一种过时的表示技术,不可能在以后的Windows版本中以可预测的方式工作。使用WPF。 –

+8

向我展示winforms的MSDN文档被弃用,并将其标记为答案... –

+0

我没有说它被弃用。我刚才说这已经过时了。这是遗产。 –

什么你正在观察的不是标题栏,而是边框尺寸。

我的问题是什么导致这种情况在Windows 10和Windows 7中呈现这种方式之间的区别?

原因是不同版本的Windows上的外观和感觉实现。

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

或者(也许更优选),您可以将表单的FormBorderStyle更改为其他值。测试什么最适合你。

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