Вкладки в строке заголовка: в чем секрет? - PullRequest
30 голосов
/ 06 апреля 2011

Chrome и Firefox 4, наряду с другими приложениями, теперь помещают часть своего пользовательского интерфейса в строку заголовка.В Windows ОС обычно контролирует всю строку заголовка.Приложение может создать пользовательскую строку заголовка, удалив строку заголовка ОС и нарисовав вместо этого «поддельную» строку заголовка (например, WinAmp), но только ОС знает, как рисовать ненастроенные элементы строки заголовка (например, «Закрыть / свернуть»)./ Максимизировать), которые различаются в зависимости от версии ОС.

Каким механизмом приложения, такие как Chrome и Firefox, «делятся» строкой заголовка с ОС (размещают пользовательские элементы в строке заголовка, сохраняя оригинальную визуальную тему ОС)?

enter image description here

В Chrome вкладки вторгаются в строку заголовка, поэтому для текста заголовка не хватает места.

Ответы [ 4 ]

21 голосов
/ 08 апреля 2011

У Microsoft есть очень подробное объяснение в статье Пользовательская оконная рама с использованием DWM .

5 голосов
/ 06 апреля 2011

Строка заголовка и граница окна принадлежат не клиентской области (NC) окна.Если вы пишете приложение для работы с сообщениями, вы можете предоставить свою собственную логику и внешний вид этой области, используя оконные сообщения WM_NCPAINT и WM_NCHITTEST (как писал Джон).

Хотя эта область довольно умеренно используется вВ предыдущих версиях Windows Microsoft (по крайней мере с Vista) начала делать область, не относящуюся к клиенту, более привлекательной и многофункциональной.

В современных приложениях довольно часто полностью игнорируют область, не относящуюся к клиенту, и вместо этогосоздайте окно, которое не имеет строгой границы окна и, таким образом, состоит ТОЛЬКО из клиентской области.При использовании этого метода окно должно предоставлять собственную реализацию для рисования заголовка окна и кнопок окна (свернуть, развернуть / восстановить и закрыть).Сочетание этого метода с прозрачностью окна делает возможным и довольно простым создание захватывающих пользовательских интерфейсов.

Если вы используете WPF, вы найдете класс WindowChrome , очень полезный для этой цели.Этот класс является частью .NET 4 framework и доступен в виде отдельной библиотеки для .NET 3.5.

Редактировать

Очевидно, кому-то этот ответ не понравился.Просто чтобы прояснить: я не говорю, что так делает Chrome или любое другое приложение.Я говорю, что, как я описал, это реальное решение, которое я и компания, в которой я работаю, использовали в нескольких проектах, и я точно знаю, что несколько других приложений используют такой же подход.Это может быть не самым лучшим, но это, безусловно, способ сделать это!: -)

1 голос
/ 06 апреля 2011

Мне лень смотреть на исходники chrome и firefox, чтобы узнать, что именно они сделали, но, скорее всего, они включают в себя пользовательскую обработку для WM_NCPAINT и WM_NCHITTEST. Они могут позволить ОС выполнять базовую окраску заголовков, а затем размещать свои биты сверху. Альтернатива состоит в том, чтобы сделать всю живопись самостоятельно, включая вызовы API-интерфейса DWM для обработки всех причудливых битов. В любом случае, это уродливо пытаться делать, и если вы не сделаете это правильно, это будет выглядеть и чувствовать себя ужасно.

0 голосов
/ 04 апреля 2014

Возможно, на это стоит обратить внимание: https://github.com/lstratman/.NETTitleBarTabs

и еще одна ссылка: http://www.nuget.org/packages/TitleBarTabs/

Я сам не пробовал и посмотрю, каки как хорошо это работает.

...