2010-10-27 68 views
1

我工作的一个子类NSWindow和我遇到一些奇怪的行为,让我怀疑我的一些假设有关Windows在Mac OS X中是如何工作的NSApp隐藏了什么:实际上是否使用NSWindow实例?

[[NSApplication sharedApplication] hide: self]叫什么恰恰发生在NSWindow实例?

所有不返回NO的窗口到-(BOOL)canHide从屏幕上消失。然后,当应用程序变为活动状态或调用[NSApplication sharedApplication] unhide: self]时,所有窗口都会重新显示。

我曾经以为,这种通过采取当前窗口状态的快照,然后呼吁所有NSWindow实例orderOut:,然后向后进行整个事情时unhide:被称为实现。

但是,似乎并非如此。我的NSWindow子类的orderOut:方法不被称为..实际上它也没有被隐藏。它确实将setCanHide:设置为YES,但是发生了什么?

任何见解都将非常感激。

最好的问候,

弗兰克

回答

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在)。

但是没有orderOut:,其实根本没有objc_msgSend()

你需要什么?或者你只是好奇?因为在大多数情况下,你应该很好地倾听NSApplicationWill/DidHideNotification

+0

谢谢你看看。我最后做了几乎相同的事情,单步调试调试器,但这不是我所熟悉的事情。我认为有人可能会对以前的工作有一些想法......在OS X中,Cocoa层经常只做表面工作,然后一切都进入Carbon层。我试图自己做很多窗口管理,因为我需要更多的窗口行为控制,而不是Cocoa通常给你的(窗口更改层)。如果NSWindow真的完成了整个工作,那将会很好。 – 2010-10-29 06:11:07

+0

最后,我意识到我无法通过继承NSWindow或通过通知获得所有必需的功能,所以我得到了一个混合解决方案(覆盖一些窗口管理任务,并在后台重新配置NSWindow以响应应用程序和窗口通知),它似乎工作正常。这不是很优雅。谢谢你的帮助。 – 2010-10-29 06:17:06

相关问题