Почему это окно имеет квадратные углы?

24

В Windows 7 с темой Aero окно « Настройки» в Notepad ++ имеет квадратные углы, значок системного меню отсутствует, кнопку закрытия и более темную 1pxграницу. Это окно также имеет AlwaysOnTopатрибут.

Notepad ++
(Я изменил размер окна, чтобы соответствовать ширине 640px.)

Интересно, что вы можете скопировать этот стиль в другие окна, используя AutoHotkey . Таким образом, казалось бы, что здесь нет грязных уловок. Тем не менее, я не думаю, что видел этот стиль окна где-либо еще.

Использует ли этот стиль Microsoft? У этого типа окна есть имя?


Для любопытных: Нормальный против "Квадрат"

обычный   калькулятор

iglvzx
источник
Я думаю (но не уверен), что .NET Framework даст рамку со скругленными углами по умолчанию, и никто не хочет менять ее.
Soandos
Потому что у Apple есть патент на закругленные углы.
Хлоя

Ответы:

37

Это называется окно инструментов (панель) . Любые окна, которые имеют WS_EX_TOOLWINDOWрасширенный стиль, будут отображаться без системного меню или блоков минимизации / максимизации и небольшой заголовка. В Windows XP и более поздних версиях (которые поддерживают темы) окна инструментов обычно отображаются без закругленных углов (по крайней мере, с темами по умолчанию).

Этот стиль обычно используется для панелей инструментов (рисунок 1). Вы можете увидеть это, перетащив панель инструментов из программы, которая позволяет вам переставить панели инструментов. Обратите внимание, что оно становится окном, похожим на рассматриваемое. Проводник Windows также использует его для настольных лент (рисунок 2), которые в основном то же самое. Это можно увидеть, перетащив папку к одному из краев экрана, а затем перетащив получившуюся панель инструментов / рабочий стол на рабочий стол.

Очевидно, что некоторые программы используют этот стиль для других целей, часто как способ создания своего рода временного временного диалога, который является дочерним по отношению к основной программе.

Примечание: это имеет несколько эффектов (первые два из которых обычно являются причинами его нестандартного использования):

  • Окно / диалог с этим стилем не получает кнопку на панели задач
  • Предотвращает Alt+ Tabbing к диалогу
  • Это также не позволяет Alt+ PrtScrзахватывать только диалог; все окно родительской программы захвачено.

Рисунок 1: Окно панели инструментов MSPaint

введите описание изображения здесь

Рисунок 2: Настольная панель Windows Explorer

введите описание изображения здесь

Synetech
источник
Ага! В этом есть смысл. :)
iglvzx
Alt+ PrintScreenзахватывает только диалог в Windows 7 с диалогом настроек Notepad ++.
Боб
17

Это детализирует название этого стиля окна и параметры, доступные в .NET; см. отличный ответ @ Synetech о первоначальной цели этого стиля окна, причинах его использования для такого диалогового окна и реализации в неуправляемых программах Windows, таких как Notepad ++.


Окно имеет квадратные углы и выглядит так, потому что один из дизайнеров / программистов Notepad ++ решил использовать определенный стиль окна. Synetech подробно описывает преимущества этого стиля окна.

В .NET / Visual Studio это устанавливается в FormBorderStyleсвойстве System.Windows.Forms.Formкласса. В частности, это FixedToolWindow. Возможные значения в System.Windows.Forms.FormBorderStyleперечислении.

В ToolWindow.NET со всеми значениями по умолчанию работают немного иначе, чем WS_EX_TOOLWINDOWв Windows API, хотя они выглядят одинаково. При тестировании, я определил , что они действительно появляются на панели задач , и они действительно появляются на Alt+ Tabпереключателе задач , если свойство формы ShowInTaskbarне установлено false. ShowInTaskbarвлияет на видимость как на панели задач, так и на Alt+ Tabдля ToolWindows, но только на панель задач для других.

Между тем, также возможно удалить значки / свернуть / восстановить / развернуть кнопки из более распространенных стилей окна, хотя кажется невозможным добавить их в ToolWindows. Также можно скрыть обычные окна из панели задач.

WS_EX_TOOLWINDOWНасколько я могу судить, единственным функциональным преимуществом является то, что окно не появляется в Alt+ Tab.


Я включил несколько скриншотов, сравнивающих стили окон .NET. Они не используются непосредственно Notepad ++ и другими неуправляемыми программами, но называются Microsoft, поэтому ...

Возможные значения FormBorderStyle:

Первое изображение - это скриншот работающей программы с включенной Aero, второе - из конструктора Visual Studio (без Aero).
Нажмите на изображения для полной версии.
Описания взяты из статьи MSDN на FormBorderStyleперечисление.

  • None

    Без границ.

Screenshot_Aero Screenshot_NonAero

  • FixedSingle

    Фиксированная однострочная граница.

Screenshot_Aero Screenshot_NonAero

  • Fixed3D

    Фиксированная трехмерная граница.

Screenshot_Aero Screenshot_NonAero

  • FixedDialog

    Толстая фиксированная граница в стиле диалога.

Screenshot_Aero Screenshot_NonAero

  • Sizable (дефолт)

    Изменяемая граница.

Screenshot_Aero Screenshot_NonAero

  • FixedToolWindow

    Граница окна инструмента, размер которой не изменяется. Окно инструмента не появляется на панели задач или в окне, которое появляется, когда пользователь нажимает ALT+ TAB. Хотя FixedToolWindowуказанные формы обычно не отображаются на панели задач, вы также должны убедиться, что для ShowInTaskbarсвойства установлено значение false, так как его значение по умолчанию равно true.

Screenshot_Aero Screenshot_NonAero

  • SizableToolWindow

    Изменяемая граница окна инструмента. Окно инструмента не появляется на панели задач или в окне, которое появляется, когда пользователь нажимает ALT+ TAB.

Screenshot_Aero Screenshot_NonAero

боб
источник
Да! это то, о чем мы говорили.
avirk
Это не имеет ничего общего с управляемым / неуправляемым или собственным / .NET кодом. Это просто вопрос того, как Windows стилирует окна со WS_EX_TOOLWINDOWстилем. .NET просто псевдонимы FixedToolWindowв WS_EX_TOOLWINDOWи SizableToolWindowк WS_EX_TOOLWINDOW|WS_THICKFRAME. Без обид, но этот ответ на самом деле не отвечает на вопрос и не объясняет заданного поведения, это просто список / ресурс различных стилей окон, используемых в .NET.
Synetech
@ Synthech Я знаю, что это не имеет никакого отношения к тому, управляется ли код или нет, я просто подумал, что дам название .NET использует и другие доступные опции, со скриншотами различий. Does this type of window have a name?Он так много отвечает, по крайней мере, с точки зрения программиста .NET. А объяснение? Потому что программисту хотелось его использовать. Вы перечислили возможные эффекты. Вот и все. Будь то рекомендовано или осуждено MS, я понятия не имею. Лично я думаю, что вы проделали замечательную работу, объясняя это.
Боб
Вот для чего нужны правки.
Synetech
Что это @Synetech?
Боб