Уровни окна и уровни
Windows может быть помещен в экран в трех измерениях. Помимо горизонтального и вертикального размещения, окна разделены на уровни наоборот в отличных уровнях. Каждое окно приложения и окно документа существуют в его собственном уровне, таким образом, могут быть чередованы документы из различных приложений. При щелчке по окну для выявления это не нарушает порядок разделения на уровни никакого другого окна. Глубина окна в уровнях определяется тем, когда к окну в последний раз получили доступ. Когда пользователь щелкает по неактивному документу или выбирает его из Меню окна, только тот документ и любые открытые служебные окна должны быть выявлены.
Уровни окна
Windows упорядочивается в нескольких отличных уровнях. Окна группы уровней окна подобного типа и цели так, чтобы более «важные» (такие как предупредительные панели) появились перед теми меньшая важность. Уровень окна служит старшим битом для определения его позиции относительно других окон. Windows может быть переупорядочен друг относительно друга в данном уровне; данное окно, однако, не может быть разделено на уровни выше других окон в более высоком уровне.
Существует много предопределенных уровней окна, указанных константами, определенными NSWindow
класс. Уровни, которые Вы обычно используете: NSNormalWindowLevel
, который указывает уровень по умолчанию; NSFloatingWindowLevel
, который указывает уровень для плавающих палитр; и NSScreenSaverWindowLevel
, который указывает уровень для окна экранной заставки. Вы могли бы также использовать NSStatusWindowLevel
для окна состояния, или NSModalPanelWindowLevel
для модальной панели. Если необходимо реализовать собственные всплывающие меню, Вы используете NSPopUpMenuWindowLevel
. Оставление двумя уровнями, NSTornOffMenuWindowLevel
и NSMainMenuWindowLevel
, резервируются для системного использования.
Установка упорядочивания и уровня программно
Можно использовать orderWindow:relativeTo:
метод для упорядочивания окна в его уровне перед или в задней части другого окна. Вы более обычно используете удобные методы указать упорядочивание, такой как makeKeyAndOrderFront:
(который также влияет на состояние), orderFront:
, и orderBack:
, а также orderOut:
, который удаляет окно из экрана. Вы используете isVisible
метод, чтобы определить, идет ли окно или от экрана. Можно также установить окно, которое будет удалено из экрана автоматически, когда его приложение не является активным использованием setHidesOnDeactivate:
.
Обычно у Вас не должно быть потребности программно установить уровень окна, так как Какао автоматически определяет надлежащий уровень для оконного на его характеристиках. Служебная панель, например, автоматически присваивается NSFloatingWindowLevel
. Можно, тем не менее, установить уровень окна с помощью setLevel:
метод; например, можно установить уровень стандартного окна к NSFloatingWindowLevel
если Вы хотите служебное окно, которое похоже на стандартное окно (например, для действия как инспектор). Это имеет два недостатка, однако: во-первых, это может нарушить инструкции по интерфейсу пользователя; во-вторых, при присвоении окна плавающему уровню необходимо гарантировать, что Вы также устанавливаете его, чтобы скрыться на деактивации Вашего приложения или сбросить его уровень, когда скрыто Ваше приложение. Какао автоматически заботится о последнем аспекте для Вас при использовании конфигураций окна по умолчанию.
В настоящее время нет никакого уровня, указанного, чтобы позволить Вам помещать окно выше окна экранной заставки. Если необходимо сделать это (например, для показа предупреждения, в то время как экранная заставка работает), можно установить уровень окна для великого, чем та из экранной заставки, как показано в следующем примере.
[aWindow setLevel:NSScreenSaverWindowLevel + 1]; |
Кроме этого конкретного случая, Вы отговорены установить окна на пользовательских уровнях, так как это может привести к неожиданному поведению.