【发布时间】: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给出的结果与我在此处显示的结果相同。