为什么这个窗户有方角?

为什么这个窗户有方角?

在具有 Aero 主题的 Windows 7 上,Notepad++ 的优先窗口有方角,没有系统菜单图标,有一个关闭按钮,1px边框较暗。此窗口还有一个AlwaysOnTop属性。

记事本++
(我调整了窗口大小以适合宽度640px。)

有趣的是,你可以使用以下方法将此样式复制到其他窗口自动热键。所以,看起来似乎没有涉及任何肮脏的伎俩。不过,我认为我从未在其他地方见过这种窗口样式。

使用这种风格会受到微软的谴责吗?这种类型的窗口有名字吗?


好奇者:普通版与“方形版”

普通的   计算器

答案1

这被称为工具(栏)窗口. 任何具有WS_EX_TOOLWINDOW扩展样式将呈现为无系统菜单或最小化/最大化框和小标题栏。在 Windows XP 及更高版本(支持主题)中,工具窗口通常呈现为无圆角(至少默认主题如此)。

这种样式通常用于工具栏(图 1)。您可以通过将工具栏拖出允许您重新排列工具栏的程序来看到它。请注意,它会变成一个看起来像所讨论的窗口。Windows 资源管理器也将其用于桌面带(图 2),它们基本上是相同的。您可以通过将文件夹拖到屏幕边缘之一,然后将生成的工具栏/桌面带拖出到桌面来看到它们。

显然,一些程序将该样式用于其他目的,通常作为创建一种模态、临时对话框的方式,该对话框是主程序的子程序。

注意:这有几个影响(前两个通常是原因因为它的非标准用法):

  • 具有此样式的窗口/对话框在任务栏上没有按钮
  • 它可以防止Alt+ Tabbing 进入对话框
  • 它还可以防止Alt+PrtScr仅捕获对话框;整个父程序窗口都会被捕获。

图1:MSPaint 工具栏窗口

在此处输入图片描述

图 2:Windows 资源管理器桌面带

在此处输入图片描述

答案2

这详细说明了此窗口样式的名称和 .NET 中可用的选项;有关此窗口样式的原始目的、它可能用于此类对话框的原因以及在非托管 Windows 程序(如 Notepad++)中的实现,请参阅@Synetech 的出色回答。


窗口有方角,之所以看起来像这样,是因为 Notepad++ 的一位设计者/程序员决定使用一种特定的窗口样式。Synetech 详细介绍了该窗口样式的优点。

在 .NET/Visual Studio 中,这是在FormBorderStyle类的属性System.Windows.Forms.Form。具体来说,它是FixedToolWindow。可能的值在System.Windows.Forms.FormBorderStyle枚举。

.NET 中所有值均为 default 的sToolWindow与 Windows API 中的 plain 略有不同WS_EX_TOOLWINDOW,尽管它们看起来一样。经过测试,我确定它们出现在任务栏上,并且除非将 form 属性设置为 ,否则会出现在Alt+任务切换器上。对于s 来说,这会影响任务栏和+ 的可见性,但对于其他来说,仅影响任务栏的可见性。TabShowInTaskbarfalseShowInTaskbarAltTabToolWindow

同时,也可以从更常见的窗口样式中删除图标/最小化/恢复/最大化按钮,尽管似乎无法将它们添加到ToolWindows。还可以从任务栏隐藏普通窗口。

WS_EX_TOOLWINDOW据我所知,唯一的功能优势是窗口不会出现在Alt+中Tab


我附上了一些比较 .NET 窗口样式的屏幕截图。这些不是 Notepad++ 或其他非托管程序直接使用的,但是由微软命名,因此......

可能的值FormBorderStyle

第一张图片是启用 Aero 后正在运行的程序的屏幕截图,第二张图片是 Visual Studio 设计器视图(无 Aero)的屏幕截图。
单击图片可查看完整尺寸版本。
描述取自MSDN 文章FormBorderStyle枚举上。

  • None

    无边界。

截图_Aero 截图_NonAero

  • FixedSingle

    固定的单线边框。

截图_Aero 截图_NonAero

  • Fixed3D

    固定的三维边框。

截图_Aero 截图_NonAero

  • FixedDialog

    粗且固定的对话框式边框。

截图_Aero 截图_NonAero

  • Sizable(默认)

    可调整大小的边框。

截图_Aero 截图_NonAero

  • FixedToolWindow

    不可调整大小的工具窗口边框。工具窗口不会出现在任务栏中,也不会出现在用户按ALT+时出现的窗口中TAB。尽管指定的表单FixedToolWindow通常不会显示在任务栏中,但您还必须确保将属性ShowInTaskbar设置为false,因为其默认值为true

截图_Aero 截图_NonAero

  • SizableToolWindow

    可调整大小的工具窗口边框。工具窗口不会显示在任务栏中,也不会显示在用户按ALT+时显示的窗口中TAB

截图_Aero 截图_NonAero

相关内容