2011-07-25 21 views
0

我正在爲Mac OS編寫一個小型Cocoa應用程序,我的目標是顯示一個窗口,然後讀取屏幕上的像素。我已經知道如何做後一部分,但在繼續之前出現窗口時遇到麻煩。從我看到的,像NSWindow的makeKeyAndOrderFront觸發的窗口更新被推遲。同步調用NSWindow makeKeyAndOrderFront

我還是比較新的可可,但我基本上想要做這樣的事情:

[myWindow makeKeyAndOrderFront:self]; 
// application blocks right here until the window is actually shown 
... 

那麼,如何我作出這樣的阻塞操作發生的呢?

+0

爲什麼在讀取像素之後不要顯示窗口?也不應該花那麼長時間。 – spudwaffle

+0

我想讀取由窗口繪製的像素。 –

+0

所以你想截取你的應用程序的一個窗口的截圖? – spudwaffle

回答

0

嘗試調用 - [NSWindow顯示]在您的窗口,這將迫使它立即顯示。

+0

凱文還有一個很好的建議,直接讀取窗口的像素。您可以考慮使用 - [NSView lockFocus]方法和 - [NSBitmapImageRep initWithFocusedViewRect:]直接從特定窗口的後備存儲中讀取數據。 –

0

只需委派一個對象作爲窗口的NSWindowDelegate,然後在委託中調用windowDidBecomeKey:

+0

我試過了,但沒有得到正確的結果。看起來這個回調似乎太早了。作爲參考,我正在繪製一個覆蓋整個屏幕的矩形。 –

+0

你究竟想要測試什麼? – spudwaffle

1

也許你可以從窗口獲取像素,而不是屏幕?在Mac OS X上,幾乎每個窗口都有自己的緩衝區(後臺存儲),無論它是否可見。即使系統對話框模糊了放置窗口的屏幕區域,這也將確保您的測試工作正常。