为什么这个窗户有角?


24

在具有Aero主题的Windows 7上,Notepad ++的“ 首选项”窗口具有方形角,没有系统菜单图标,关闭按钮和较深的1px边框。该窗口也有一个AlwaysOnTop属性。

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

有趣的是,您可以使用AutoHotkey将此样式复制到其他窗口。因此,似乎没有任何肮脏的把戏。但是,我认为我在其他任何地方都没有看到这种窗口样式。

是否使用Microsoft谴责的这种风格?这种窗口有名称吗?


出于好奇:正常vs“平方”

正常   计算器


我认为(但不确定).NET框架默认情况下会提供一个带有圆角的框架,没有人真的喜欢更改它。
soandos 2012年

因为苹果在圆角上有一项专利。
Chloe,2015年

Answers:


37

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

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

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

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

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

图1: MSPaint工具栏窗口

在此处输入图片说明

图2: Windows资源管理器桌面

在此处输入图片说明


啊哈!那讲得通。:)
iglvzx 2012年

Alt+ PrintScreen仅捕获Windows 7中带有“记事本++首选项”对话框的对话框。
鲍勃

17

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


该窗口具有直角,外观类似,因为Notepad ++的设计师/程序员之一决定使用特定的窗口样式。Synetech详细介绍了该窗口样式的优点。

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

ToolWindow.NET中带有所有值的s的默认工作方式WS_EX_TOOLWINDOW与Windows API中的s有所不同,尽管它们看起来相同。通过测试,我确定它们确实出现在任务栏上,并且确实出现在Alt+ Tab任务切换器上,除非将form属性ShowInTaskbar设置为falseShowInTaskbar影响s 在任务栏和Alt+ TabToolWindow的可见性,但仅影响其他任务栏的可见性。

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

WS_EX_TOOLWINDOW据我所知,唯一提供的功能优势是该窗口未显示在Alt+中Tab


我包括一些比较.NET窗口样式的屏幕截图。这些都不是直接使用记事本+ +,还是其他非托管程序,但微软命名的,所以...

可能的值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


是的 那就是我们在说的。
2012年

它与托管/非托管或本机/.NET代码无关。这仅仅是Windows如何使用样式来设置窗口WS_EX_TOOLWINDOW样式的问题。.NET简单的别名FixedToolWindowWS_EX_TOOLWINDOWSizableToolWindowWS_EX_TOOLWINDOW|WS_THICKFRAME。没有冒犯,但是此答案实际上并不能回答问题或解释所要求的行为,它只是.NET中使用的不同窗口样式的列表/ 资源
Synetech

@Synetech我知道与代码是否受管无关,我只是想给我.NET使用名和其他可用选项,并附上差异截图。Does this type of window have a name?至少从.NET程序员的角度来看,它确实回答了很多。和解释?因为程序员喜欢使用它。您已列出可能需要的效果。就是这样 无论是推荐还是MS谴责,我都不知道。就个人而言,我认为您在解释它方面做得非常出色。
鲍勃2012年

这就是编辑的目的。
Synetech 2012年

那是什么@Synetech?
鲍勃
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.