Faq как запретить кнопку close [x] в заголовке окна


Содержание

Как скрыть кнопку закрытия в окне WPF?

Я пишу модальный диалог в WPF. Как установить окно WPF, чтобы не было кнопки закрытия? Мне бы хотелось, чтобы у WindowState была обычная строка заголовка.

Я нашел ResizeMode, WindowState и WindowStyle, но ни одно из этих свойств не позволяет мне скрывать кнопку закрытия, но отображать строку заголовка, как в модальных диалогах.

WPF не имеет встроенного свойства, чтобы скрыть кнопку заголовка Close, но вы можете сделать это несколькими строками P/Invoke.

Сначала добавьте эти объявления в класс Window:

Затем поместите этот код в событие Window Loaded:

И там вы идете: больше нет кнопки «Закрыть». У вас также не будет значка окна в левой части строки заголовка, что означает отсутствие системного меню, даже если вы щелкните правой кнопкой мыши строку заголовка — все они идут вместе.

Обратите внимание, что Alt + F4 все равно закроет окно. Если вы не хотите, чтобы окно закрывалось до завершения фонового потока, вы также можете переопределить OnClosing и установить Cancel на true, как предположил Гейб.

У меня появилась аналогичная проблема, и решение Joe White кажется мне простым и чистым. Я повторно использовал его и определил его как присоединенное свойство Window

Затем в XAML вы просто установите его так:

Задайте для свойства WindowStyle значение None, которое скроет поле управления вместе с заголовком. Нет необходимости использовать вызовы ядра.

Это не избавит вас от кнопки закрытия, но это прекратит закрывать окно.

Поместите это в свой код за файлом:

Чтобы отключить кнопку закрытия, вы должны добавить следующий код в свой класс Window (код был взят из здесь, отредактирован и переформатирован)

Этот код также отключает закрытие элемента в системном меню и запрещает закрытие диалога с помощью Alt + F4.

Вы, вероятно, захотите закрыть окно программно. Просто вызов Close() не будет работать. Сделайте что-то вроде этого:

Я пытался ответить Вячеславу, потому что мне нравится идея не удалять кнопку, а отключать ее, но по какой-то причине она не всегда срабатывала: кнопка закрытия все еще была включена, но никаких ошибок не было.

Это, с другой стороны, всегда работало (ошибка проверки опущена):

Свойство set = = WindowStyle=»None»

Я просто добавляю свою реализацию Joe White answer с помощью Interactivity Behavior (вам нужно ссылаться на System.Windows.Interactivity).

Позвольте пользователю «закрыть» окно, но на самом деле просто скрыть его.

В окне OnClosing event скройте окно, если оно уже видно:

Каждый раз, когда выполняется фоновый поток, повторно отобразите фоновое окно пользовательского интерфейса:

При завершении выполнения программы убедитесь, что все окна/могут быть закрыты:

Итак, в значительной степени это ваша проблема. Кнопка закрытия в верхнем правом углу окна не является частью окна WPF, но она принадлежит части оконного фрейма, который контролируется вашей ОС. Это означает, что вам придется использовать Win32 interop для этого.

альтернативно, вы можете использовать noframe и либо предоставить свой собственный «фрейм», либо вообще не иметь фрейма.

Ниже приведено отключение кнопок закрытия и максимизации/минимизации, на самом деле кнопки не удаляются (но удаляются элементы меню!). Кнопки в строке заголовка отображаются в отключенном/сером состоянии. (Я не совсем готов взять на себя всю функциональность сам ^^)

Это немного отличается от решения Virgoss тем, что оно удаляет пункты меню (и конечный разделитель, если необходимо), а не просто отключает их. Он отличается от решения Joe Whites, так как не отключает все системное меню, поэтому в моем случае я могу держать кнопку и значок «Свернуть».


Следующий код также поддерживает отключение кнопок «Развернуть/Свернуть», поскольку, в отличие от кнопки «Закрыть», удаление записей из меню не приводит к тому, что система делает кнопки «отключенными», даже если удаление пунктов меню отключает их функциональность.

Меня устраивает. YMMV.

Использование: Это должно быть сделано ПОСЛЕ инициализации источника. Хорошее место — использовать событие SourceInitialized окна:

Чтобы отключить функциональность Alt + F4, проще всего подключить событие отмены и использовать команду установки флага, когда вы действительно хотите закрыть окно.

Qt Coding

Qt programming, Qt tools, source code, компоненты для Qt

понедельник, 4 февраля 2013 г.

Отключить системную кнопку close

Отключить системную кнопку Close у окна можно установив окну флаги:

setWindowFlags(Qt::Window
| Qt::WindowMinimizeButtonHint
| Qt::WindowMaximizeButtonHint
| Qt::CustomizeWindowHint);

Автор: QtCoder

Действия:

3 комментария:

А как убрать кнопку «Развернуть»?

Qt::Window
| Qt::WindowMinimizeButtonHint
| Qt::WindowCloseButtonHint
| Qt::CustomizeWindowHint

Как можно отключить кнопку у приложения Оутлук?

Форум русскоязычного сообщества Ubuntu

Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

  • Форум русскоязычного сообщества Ubuntu »
  • Поддержка »
  • Рабочее окружение »
  • Unity (Модераторы: mahinist, Aleksandru) »
  • Убрать кнопку «закрыть» из заголовка окна

Автор Тема: Убрать кнопку «закрыть» из заголовка окна (Прочитано 939 раз)

0 Пользователей и 1 Гость просматривают эту тему.

  • Форум русскоязычного сообщества Ubuntu »

  • Поддержка »
  • Рабочее окружение »
  • Unity (Модераторы: mahinist, Aleksandru) »
  • Убрать кнопку «закрыть» из заголовка окна

Страница сгенерирована за 0.069 секунд. Запросов: 24.

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Faq как запретить кнопку close [x] в заголовке окна

Любой опытный пользователь в Windows меня поймет. Штатно «подавить»» заголовок любого окна работающей программы невозможно, а «утончить» панель задач» меньше минимального уровня Windows также не дает.

Однако, кое-какое средство для тех, кто страстно мечтает в программах избавится от заголовков окон у меня давно есть. Суррогатное, не очень удобное, но есть.

Как делаю я в случае, например, с браузером Opera или Тоталом, если мне надо скрыть заголовок окна, но не потерять при этом таскбар?

Мой алгоритм действий:
1) переключаю окно в оконный, а не развернутый режим.
2) мышкой за углы это окно я растягиваю максимально во все стороны, чтобы оно «заполнило» экран, как если бы было запущено в развернутом виде.
3) посредством заранее запущенной отличной утилитки MoveInactiveWin, путем зажатия клавиши Alt и движениями мышкой перемещаю «растянутое» окно таким образом, чтобы окно спусктилось по вертикали вниз на сантиметров 5, как бы частично «уползая» за нижнюю кромку экрана.
4) встав на «отъехавшую» от верхней кромки экрана верхнюю границу окна (ведь ранее я все окно спустил вниз), при зажатой левой кнопке мыши я «дотягиваю» эту границу окна до верхней кромки экрана.

Илон Маск рекомендует:  Поиск с использованием AJAX.

В итоге у меня временно получается размер окна такой, что по вертикали в оконном режиме оно как бы на сантиметра полтора БОЛЬШЕ чем размер экрана.
Дело за малым!
При зажатом альте становлюсь на любое место окна курсором мыши и ТЯНУ окно вверху по экрану таким образом, что заголовок УХОДИТ под верхнюю кромку экрана, а нижняя граница окна ВЫРАВНИВАЕТСЯ по отношению в таскбару Windows.
Возникает некий эффект предмета погружаемого в темную жидкость. часть предмета видна, а то что погружено в темную жидкость — нет.
Фактически я не «подавляю» заголовок окна, а УБИРАЮ его за верхнюю кромку экрана.

Вот в таком режиме, я получаю именно то что хочу и могу сколь угодно раз минимизировать такое окно и поднимать его снова — таскбар никуда не исчезнет!

Увы, этот вожделенный режим сохраняется только на период работы окна программы, модифицированного по размеру вышеописанным способом. Как только я закрою окно, а потом открою его снова, все вышеописанные процедуры придется повторить снова, так как Windows не запоминает размеры модифицированных окон и сбрасывает их в начальные при последующем запуске.
В случае с браузером, который обычно запущен всегда в одном экземпляре и никогда мной не выгружается за весь сеанс работы Windows всё оправданно, а вот с тоталом, который часто запускается и в нескольких экземплярах в разное время — все довольно напряжно.

Между тем, даже суррогатных средств для «борьбы» с толщиной панели задач у меня увы нет (

Предложите способы, я буду рад.

P.S. На всякий пожарный добавлю, что:

1) В винде ЛЮБОЕ окно работающей программы с программно подавленным заголовком, распахнутое на весь экран считается запрашивающим фокус на фуллскрин и поэтому винда немедленно убриает с экрана таскбар, что в моем случае абсолютно неприемлимо. То есть советовать мне программы для подавления заголовка не надо — это не прокатит.
2) Я прекрасно знаю о модифицированных темах Windows, об армии многочисленных лончеров, заменителй таскбара, дурацких тинейджержских астонах, виндблиндсах и т.п подменителей шелла, которые визуально могут немного изменить размеры элементов окон, панелей и т.д., но реально поменять ничего не дадут.
Это не то!
Мне эти глупости не нужны, мне нужно штатное изменение толщины родной панели задач Windows.

———-
Добро пожаловать в мой блог обо всех старых и новых незаконных трюках сотовых операторов!
Всего записей: 6523 | Зарегистр. 04-10-2004 | Отправлено: 10:26 01-07-2011 | Исправлено: cracklover, 10:28 01-07-2011
Nikoderiko

Advanced Member

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Размеры таскбара и заголовка зашиты в файл темы (*.msstyles)
Выбор подходящей вам темы как раз и является штатным средством Windows.

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

Кстати, непонятно, о какой операционной системе идет речь — Windows 3.11 или Windows95 ?

Всего записей: 800 | Зарегистр. 17-07-2002 | Отправлено: 15:06 01-07-2011
cracklover

Gold Member

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Nikoderiko,
мда.
как бы я до тошнотворности подробно все выше не объяснял, по моему вы так ничего и не поняли!
это же очевидно, что размеры зашиты в темах, да только размеры эти дискретные (!), и плавно менять размер, как например у окон вообще не получится!
попробуйте тянуть панель задач вверх-вниз и увидите, что размер меняется с шагом не менее 1 см (плюс-минус, так как зависит от разрешения экрана и выбранного режима масштабирования шрифтов , ну и минимального размера иконок в системе). менять плавно не при каких условиях не получится.
при этом, если я залезу в мсстайлы редактором ресурсов, я и тогда не смогу уйти от дискретности, а также уменьшить высоту панели задачи меньше, чем физически размер иконок на ней расположенных.
а если ещё учесть, что я ВООБЩЕ не использую тему, а всю жизнь предпочитаю аскетичный и настраивающий на серьезную работу, а не занятия лабудой классик шелл, то темы отпадают вообще, как решение вопроса.

и, кстати, как ответ на вопрос об оси, все вышеописанное относится к любой Windows от 3.11 до 8-ки.

———-
Добро пожаловать в мой блог обо всех старых и новых незаконных трюках сотовых операторов!
Всего записей: 6523 | Зарегистр. 04-10-2004 | Отправлено: 15:27 01-07-2011 | Исправлено: cracklover, 15:29 01-07-2011
weertt

Junior Member

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата:

а именно заголовок окна!

Высота заголовка есть функция размера шрифта заголовка.


Цитата:

большая высота панели задач

Сделайте скрытую панель.

Всего записей: 53 | Зарегистр. 02-01-2008 | Отправлено: 21:41 02-07-2011
cracklover

Gold Member

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору weertt
я вообще-то писал четко, что мне нужна панель задач!
скрытой мне она не нужна!

———-
Добро пожаловать в мой блог обо всех старых и новых незаконных трюках сотовых операторов!
Всего записей: 6523 | Зарегистр. 04-10-2004 | Отправлено: 08:11 05-07-2011
samelk

Newbie

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Приветствую, может уже не актуально, но все же вот программка которая замечательно скрывает заголовки
https://drive.google.com/folderview? >
Всего записей: 3 | Зарегистр. 15-01-2009 | Отправлено: 14:47 21-02-2014
cracklover

Gold Member

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору samelk
утилита интересная, но это снова не то что надо.
вместе с подавлением заголовка, она еще и панель задач скрывает.

———-
Добро пожаловать в мой блог обо всех старых и новых незаконных трюках сотовых операторов!
Всего записей: 6523 | Зарегистр. 04-10-2004 | Отправлено: 21:04 21-02-2014
KLASS

Moderator

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору cracklover
Можно уменьшить заголовок окна, границы окна и панель задач.
В свойствах панели: Использовать маленькие кнопки.
Панель управления=>Экран=>Заголовки окон=6=>Применить
Далее выполнить:

Код:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics]
«CaptionW
«CaptionHeight»=»-200″
«PaddedBorderW

Убрать кнопки Свернуть, Развернуть и Закрыть, иконку из заголовка окна в форме

admin

Если вам понадобилось убрать с заголовка формы кнопки: Свернуть, Развернуть и Закрыть, то делаем по инструкции:

Кнопки Свернуть и Развернуть:
свойства MinimizeBox и MaximizeBox . Значение true добавляет, а false убирает эти кнопки из заголовка.

Кнопка Закрыть:
свойство ControlBox . Значение false уберет данную кнопку.

Как убрать иконку из заголовка?
свойство ShowIcon — значение false .

Как запретить приложению отображаться в панели задач?
свойство ShowInTaskbar -значение false

MagentaWAVE

Примеры и готовые решения для оформления блога и сайта. Разработка и дизайн шаблонов Blogger.

Как сделать кнопку «Закрыть» и скрыть элемент со страницы

Вариант 1. Кнопка «Закрыть» только на CSS

Вариант 2. Автоматическое добавление кнопки-крестика на jQuery

Алгоритм скрипта следующий: у всех указанных блоков, провести проверку на наличие в каждом элемента кнопки, если нет, то добавить, ничего не делать если присутствует. По клику на кнопку, скрыть ближайший блок с указанным селектором.

6 комментариев:

Вариант только на CSS. Непонятно как установить саму кнопку ? У меня отображается только надпись «Какой то контент» Объясните новичку как быть с кнопкой ? Кнопка это изображение ? Как её прикрутить )) ?

С большим трудом разобрался куда чего и как, часа два возился, в итоге получилось, блок скрывается по нажатию кнопки. А вот реклама от google помещённая в этот блок остаётся и никуда не исчезает. :(

С ней нужно «правильный» блок скрывать )

Здравствуйте, думаю очень полезная штука, обязательно воспользуюсь, но есть пара вопросов: можно как то прикрутить еще одну кнопку, но уже с добавлением (как закладки) не знаю как даже это обьяснить, допустим нажал пользователь «Х» как я понимаю пока не почистит куки, то он этот элемент уже не будет видеть при повторном заходе на сайт, это хорошо, но можно так сделать чтоб была еще кнопка «+» при нажатии на которую материал добавлялся как бы в личную страничку пользователя на сайте, другими словами сделать что то вроде корзины отмеченных пользователем материалов? И второй вопрос, как сделать такое выдвижное меню как у Вас слева на сайте? Спасибо.

Еще одну кнопку прикинуть можно, насчет «корзины» можно подумать. По поводу мену, надеюсь, опубликовать в ближайшее время статью.


Как отключить заголовки у GTK3-приложений? (использую Awesome, а они портят стиль)

никак. я так понимаю, тебе будет достаточно убрать кнопку закрытия, чтобы заголовок выглядел просто как тулбар?

Увы, кнопки закрытия у приложений на GTK3 с CSD никуда не делись оО

Кстати, посмотрел gconf-editor’ом — в /org/gnome/desktop/ нет «каталога» «wm». Так и должно быть?

gconf или dconf? все эти ключи в dconf.

Платиновый тред. Скоро надо уже будет в faq добавить.

Q: Как отключить CSD в gtk3-приложениях?
A: Никак.

А вообще, как ты себе это представляешь? Вот в заголовке у приложения присутствуют какие-то элементы управления, где они по-твоему должны оказаться?

А вообще, как ты себе это представляешь? Вот в заголовке у приложения присутствуют какие-то элементы управления, где они по-твоему должны оказаться?

если убрать кнопки управления окном, получится обычный тулбар.

Тогда я не тем смотрел.

Кстати, ничего что сам gnome не установлен? Может, в этом проблема?

Кстати, ничего что сам gnome не установлен? Может, в этом проблема?

максимум, что должно понадобиться — gnome-settings-daemon, dconf и gsettings-desktop-schemas. можно обойтись и без gnome-settings-daemon, но тогда придётся редактировать тему.

То есть тебе вот именно этот крестик жить не дает?

у меня-то GNOME, меня крестик устраивает. а вот в тайловом ВМ он ни к чему, поэтому мешает ТС.

Спасибо. Это — помогло :)

Lincor Решение найдено, спасибо :D

Убей оконный декоратор.

Хм. а можно как-нибудь полностью убрать titile bar? Заголовок, в общем, за который можно перетащить окно.

у меня в archlinux gtk3 заменен на gtk3-noforcedcsd

Жаль, ебилдов нет :(

подыщи замену гтк3-программам на qt или gtk2

А как управлять окном.

Ну, есть пара вариантов.

В смысле, у CSD приложений настройки в тулбаре
Вот в наутилусе сделать значки меньше сложно будет ;)
Menubae то выпилили

Тоже вариант. Но как-то не труЪ :D


В смысле, у CSD приложений настройки в тулбаре

Идея в том, чтобы выпилить title bar полностью, а тулбар отдельным рядом сделать. Чтобы стиль был един, типа

Если я тебя правильно понял, то это делается только патчами: https://bugs.launchpad.net/ayatana-design/ bug/1131664

CSD не работают при отсутствующем композитенге.

Спасибо. Увы, compton мне нужен, т.к. vsync.

Это что, на уровне настройки драйвера не решается?

Что конкретно не будет работать без compton-a?

Это что, на уровне настройки драйвера не решается?

Vsync — нет. Блоб nvidia не умеет в нормальный vsync в 2D. Вот так :D

Что конкретно не будет работать без compton-a?

Будет тиринг, портящий настроение, хех.

Vsync — нет. Блоб nvidia не умеет в нормальный vsync в 2D. Вот так :D

First of all, compton cannot do VSync better than your driver could.

Всё можно настроить и без compton-a. Композитор лишняя сущность. Было бы странно, если бы для нормальной работы X-ов при нвидии он бы всегда требовался.

Всё можно настроить и без compton-a. Композитор лишняя сущность.

Можно. Я пробовал достаточно долго без него — надоело, поставил compton — проблема решилась всего лишь «compton —vsync opengl» > «

Как запретить закрытие окна? setUndecorated(true) дает ошибку, оно и понятно, как тогда сделать?

Разработка настольных приложений на я. /

Swing, AWT & SWT

28 фев 2015 22:50

Возникла задача — запретить пользователю выход из программы, пока он не ввел пароль.
Не получается корректно написать код для windowClosing, идей больше нет, что посоветуете?

01 мар 2015 10:28

Возникла задача — запретить пользователю выход из программы, пока он не ввел пароль.
Не получается корректно написать код для windowClosing, идей больше нет, что посоветуете?

Изменен:01 мар 2015 07:29
01 мар 2015 12:20

Вантус, отлично, спасибо!
Все работает, но я видимо не точно сформулировал задачу: есть программа, из которой нельзя выйти закрытием окна. А все попытки закрыть окно должны просто сбрасываться. Т.е. запрашивать пароль при выходе не надо, пусть кнопка выхода висит, и лишь начальник в конце по паролю завершит работу. Потом через таймер буду выводить ее поверх всех окон, и диспетчер задач тоже окно не закроет.
В этом случае вообще достаточно одной строчки

Про такое решение не знал, еще раз спасибо.

JavaScript — Объект window: открытие и закрытие окон


На этом уроке мы познакомимся с различными методами объекта window, которые позволяют открывать и закрывать окна, определять закрыто ли окно, а также получать его внутреннее имя и др.

Методы объекта window: open() , close() , print() , focus() и blur() .

В этом разделе мы рассмотрим следующие методы объекта window :

  • open() — предназначен для открытия окон (вкладок);
  • close() — предназначен для закрытия окон. В основном используется для закрытия окон открытых методом open() ;
  • print() — предназначен для печати содержимого окна;
  • focus() — предназначен для передачи фокусу указанному окну;
  • blur() — предназначен для удаления фокуса с указанного окна.

Метод open() .

  • В первом параметре указывается URL страницы, которую необходимо загрузить в это окно. Если значение данного параметра не задавать, то в окне будет отображена пустая страница ( about:blank ).
  • Во втором параметре метода open указывается значение атрибута target или имя окна. Поддерживаются следующие значения:
    • _blank — URL загружается в новое окно (вкладку). Это значение используется по умолчанию;
    • _parent — URL загружается в родительский фрейм. Если его нет, то URL загружается в текущее окно (вкладку);
    • _self — URL загружается в текущее окно;
    • _top — отменяет все фреймы и загружает URL в текущее окно (вкладку) браузера. Если его нет, то URL загружается в текущее окно (вкладку);
    • В качестве параметра Вы также можете указать имя открываемого окна. Данное имя является внутренним и может использоваться веб-разработчиками для вызова функций и методов этого окна.
  • Третий параметр предназначен для указания набора свойств окна, которые вводятся через запятую. Поддерживаются следующие основные свойства окна:
    • left , top — координаты (в пикселях) левого верхнего угла окна браузера относительно левого верхнего угла экрана. Значения этих свойств должны быть положительными или равными 0;
    • height , width — высота и ширина рабочей области окна браузера. При указании значений необходимо учитывать, что ширина и высота окна браузера не может быть меньше 100 пикселей;
    • resizable — логическое свойство окна, которое предназначено для включения или выключения возможности изменения размеров окна браузера. Данное свойство принимает следующие значения: yes или 1 , и no или 0 ;
    • scrollbars — логическое свойство окна, которое предназначено для включения или выключения отображение полос прокрутки для содержимого окна браузера. Данное свойство принимает следующие значения: yes или 1 , и no или 0 ;
    • status — логическое свойство окна, которое предназначено для включения или выключения отображения статусной строки браузера. Данное свойство принимает следующие значения: yes или 1 , и no или 0 .

Рассмотрим следующий примеры:

1. Открыть пустую страницу about:blank в новом окне. Данное окно должно иметь ширину и высоту, равную 250рх:

2. Открыть веб-страницу «http://itchief.ru/» в текущем окне:

3. Открыть новое окно, имеющее определённые свойства (top=100, left=100, w >

Как взаимодействовать с окном после его открытия?

Метод open() позволяет не только открыть окно, но и получить ссылку на данное окно. Данная ссылка позволяет взаимодействовать с этим окном посредством вызова определённых свойств и методов. Т.е. мы можем с помощью JavaScript кода, расположенного в одном окне управлять другим окном.

Например, для того чтобы обратиться к объекту document открытого окна:

Открыть пустое новое окно и вывести в ней некоторый текст:

Примечание: Взаимодействовать Вы можете только с теми окнами, которые сами открыли, с другими окнами Вы работать не можете.

Метод close()

Он предназначен для закрытия окна. Данный метод не имеет параметров. Он обычно используется для закрытия окон созданных методом open() . В противном случае, когда Вы попытаетесь закрыть окно (вкладку), открытое самим пользователем (не из JavaScript), то браузер из-за соображений безопасности запросит у пользователя подтверждение на выполнение этого действия.

Например, cоздадим кнопки для открытия и закрытия окна с именем myWindow :

Метод print()

Он предназначен для печати содержимого окна. Данный метод не имеет параметров.

Метод focus()


Он предназначен для передачи фокусу указанному окну. Данный метод не имеет параметров.

Метод blur()

Он предназначен, чтобы убрать фокус с указанного окна, т.е. перемещает его на задний план. Данный метод не имеет параметров.

Свойства объекта window : name , opener , closed .

В этом разделе рассмотрим следующие свойства объекта window :

  • name — предназначено для получения или установления внутреннего имени окна;
  • opener — позволяет получить в текущем окне, ссылку на окно (объект window ), с которого было открыто данное окно;
  • closed — свойство логического типа, которое возвращает: true , если окно закрыто и false , если окно открыто.

Свойство name

Данное свойство очень часто используется для изменения внутреннего имени окна, после того как оно уже открыто. Кроме этого, свойство name может вернуть текущее значение внутреннего имени окна.

Внутреннее имя окна, это не строка, заключённая между открывающим и закрывающим тегом title — это имя окна которое предназначено для разработчика. Т.е. данное имя невидимо для пользователя.

Данное имя в основном используется в гиперссылках и формах для указания окна, в котором необходимо открыть страницу. Например, для указания внутреннего имя окна в гиперссылке используется атрибут target , Если элемент а имеет атрибут target=»searchWindow» , то при нажатии на данную ссылку браузер сначала пытается найти окно с таким внутренним именем ( searchWindow ), если окна с таким внутренним именем не существует, то он открывает новое окно и присваивает ему имя searchWindow . А если окно с таким именем существует, то новое окно не открывается, а перезагружается страница по указанной ссылке а этом окне. По умолчанию окна а браузере не имеют внутреннего имени.

Например, откроем страницу «http://www.google.com/» в окне, имеющем имя myWindow :

Например, откроем окно с помощью метода open() и выведем в нём его имя:

Свойство opener

Данное свойство позволяет получить в окне, ссылку на исходное окно (объект window ), т.е. на окно из которого было открыто данное окно.

Например, у Вас есть исходное окно (1), в котором Вы с помощью метода ореn() открываете другое окно (2). В этом окне (2) Вы можете с помощью свойства opener получить окно (1).

Свойство closed

Свойство closed возвращает логическое значение, указывающее закрыто окно или нет.

Рисуем виджеты в заголовке окна

Ни для кого не секрет, сегодня у населения в основном преобладают широкоформатные мониторы и они вынуждены экономить количество пикселей по вертикали. Это породило моду на рисование элементов управления прямо в заголовке окна. Сейчас этим уже никого не удивишь, но, тем не менее, нигде ещё не находил решения этой проблемы на Qt, поэтому сейчас мы будем это исправлять:

В тёмных застенках нашей qutIM’овской лаборатории родился класс ToolFrameWindow, который во многом подобен таким классам, как QMainWindow и QToolBar. WinAPI мытарства я описывать не буду, не хочется загромождать статью. Чтобы добиться этого эффекта необходимо расширить клиентскую зону на всё окно и руками обрабатывать позицию курсора, чтобы можно было перемещать и ресайзить окошко. При этом пропадает прозрачность, для её возращения нам помогает QtDWM.

Далее я хотел бы описать принцип его использования:

Первым делом нужно задать ему виджет, для которого мы будем рисовать в заголовке кнопки, делается это через вызов метода setCentralWidget

* This source code was highlighted with Source Code Highlighter .

Сделано это таким образом, чтобы максимально легко обеспечить перенос уже существующего кода и не создать затруднений на других платформах.

Добавление действий:

Кнопки в заголовок добавляются при помощи метода addAction, так-же можно добавлять пустое пространство addSpace или же добавлять разделитель addSeparator.

* This source code was highlighted with Source Code Highlighter .

Добавление табов, кнопок, надписей и других виджетов:

Специально для добавления всего этого безобразия был предусмотрен метод addWidget, при добавлении можно указать выравнивание через Qt::Aligment, что позволяет делать кнопки как на скриншоте. Что касается самой кнопки, то она сделана из QPushButton’а при помощи qss стилей, в частности очень помог border-image

QPushButton btn;
btn.setIcon(QIcon( «:/ubuntu.png» ));
btn.setStyleSheet( «QPushButton < "
«border: 5px;»
«border-image: url(:/button.png);»
«>» );
btn.setMinimumSize(64, 22);
btn.setMaximumSize(64, 22);

* This source code was highlighted with Source Code Highlighter .

Для рисования свечения под текстом я попробовал использовать QGraphicsDropShadowEffect, но сила свечения оказалась слишком маленькой. Это привело к некоторому замешательству, но я вспомнил про старый добрый border-image и решил сделать ход конём: отрисовать свечение как картинку и наложить её как border-image

* This source code was highlighted with Source Code Highlighter .

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

Хочу отметить, что Qt иногда срывает крышу от того, что пространство виджета расширилось за счет заголовка. Например, теперь pos() может принимать отрицательные значения, хотя такого быть в идеале не должно.

Заключение

Один небольшой скриншот:

Самые смелые могут попробовать этот плагин. Но он ещё откровенно не дописан, о нем разговор будет позже.

Огромное спасибо dtf за войну с APIлками и за реализацию всех winAPI методов. Код библиотеки доступен в gitorious’е (качаем тег habrahabr). Лицензия на данный момент GPLv2. Для использования в своем коде достаточно скопировать нужные файлы в свой проект, тестовая программа находится в каталоге wincaption.

Илон Маск рекомендует:  scrollbar-darkshadow-color в CSS
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL