![为什么这个窗户有方角?](https://linux22.com/image/1318379/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B8%AA%E7%AA%97%E6%88%B7%E6%9C%89%E6%96%B9%E8%A7%92%EF%BC%9F.png)
在具有 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 来说,这会影响任务栏和+ 的可见性,但对于其他来说,仅影响任务栏的可见性。TabShowInTaskbar
false
ShowInTaskbar
AltTabToolWindow
同时,也可以从更常见的窗口样式中删除图标/最小化/恢复/最大化按钮,尽管似乎无法将它们添加到ToolWindow
s。还可以从任务栏隐藏普通窗口。
WS_EX_TOOLWINDOW
据我所知,唯一的功能优势是窗口不会出现在Alt+中Tab。
我附上了一些比较 .NET 窗口样式的屏幕截图。这些不是 Notepad++ 或其他非托管程序直接使用的,但是是由微软命名,因此......
可能的值FormBorderStyle
:
第一张图片是启用 Aero 后正在运行的程序的屏幕截图,第二张图片是 Visual Studio 设计器视图(无 Aero)的屏幕截图。
单击图片可查看完整尺寸版本。
描述取自MSDN 文章在FormBorderStyle
枚举上。
None
无边界。
FixedSingle
固定的单线边框。
Fixed3D
固定的三维边框。
FixedDialog
粗且固定的对话框式边框。
Sizable
(默认)可调整大小的边框。
FixedToolWindow
不可调整大小的工具窗口边框。工具窗口不会出现在任务栏中,也不会出现在用户按ALT+时出现的窗口中TAB。尽管指定的表单
FixedToolWindow
通常不会显示在任务栏中,但您还必须确保将属性ShowInTaskbar
设置为false
,因为其默认值为true
。
SizableToolWindow
可调整大小的工具窗口边框。工具窗口不会显示在任务栏中,也不会显示在用户按ALT+时显示的窗口中TAB。