2010-10-27 1 views
1

Я работаю на NSWindow подклассу, и я бег в какое-то странное поведение, что делает меня вопрос некоторые из моих предположений о том, как работают окна на Mac OS X.Что скрывает NSApp: действительно ли с экземплярами NSWindow?

Что именно происходит с NSWindow случаями, когда [[NSApplication sharedApplication] hide: self] называется ?

Все окна, которые не возвращают NO -(BOOL)canHide, исчезают с экрана. Затем все окна снова появляются, когда приложение становится активным или вызывается [NSApplication sharedApplication] unhide: self].

Я предполагал, что это будет достигнуто путем принятия снимок текущего состояния окна, то вызов orderOut: на всех NSWindow экземпляров, а затем выполнять все это в обратном направлении, когда unhide: называется.

Это, похоже, не так. Метод orderOut: моего подкласса NSWindow не называется .. на самом деле он также не скрыт. Он установил setCanHide: YES, хотя .. что происходит?

Любые идеи были бы очень оценены.

С наилучшими пожеланиями,

Frank

ответ

2

вспылить инструменты и выяснить для себя! На моей машине (10.6.4) и 32-битном приложении [NSApplication hide:] звонки ShowHideProcess. Это описываться:

http://developer.apple.com/library/mac/#documentation/Carbon/Reference/Process_Manager/process_mgr_ref.pdf

ShowHideProcess затем вызывает CPSPostHideReq (что-то в CoreGraphics).

Но нет заказаOut :, фактически нет objc_msgSend() на всех.

Для чего это необходимо? Или вам просто любопытно? Потому что в большинстве случаев вы должны просто отлично слушать NSApplicationWill/DidHideNotification.

+0

Спасибо, что посмотрели. В конце концов, я сделал почти то же самое, единственный шаг по отладчику, но это не та вещь, с которой мне очень нравится. Я подумал, что кто-то может подумать о том, как это работает с предыдущей работы .. так часто в OS X слой Cocoa только обрабатывает поверхность, а затем все переходит в слой Carbon. Я пытался сделать много управления окнами самостоятельно, потому что мне нужно было немного больше контролировать поведение окна, чем обычно предлагает Cocoa (окна, меняющие слои); это было бы хорошо, если бы NSWindow действительно выполнял всю работу. –

+0

В конце концов, осознав, что я не смог добраться до всех необходимых функций путем подкласса NSWindow или с помощью уведомлений, я получил гибридное решение (переопределение некоторых задач управления окнами и выполнение некоторых за кулисами реконфигурации NSWindow в ответ на приложение и окно уведомления), и, похоже, он работает нормально. Это просто не очень элегантно. Спасибо за вашу помощь. –