2010-10-27 112 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

相關問題