2011-04-23 31 views
2

我需要屏幕邊界來知道最小和最大的x/y座標。我的屏幕分辨率是1440x900。當我問NSScreen爲可見幀,即NSScreen的可見框太大

NSRect frame = [[NSScreen mainScreen] visibleFrame] 

我碰到下面的x/y值:

xMin = NSMinX(frame) // 74 
yMin = NSMinY(frame) // 0 
xMax = NSMaxX(frame) // 1440 
yMax = NSMaxY(frame) // 878 

我左側的碼頭,所以我XMIN較大0和ymin是0.但問題是yMax。據我所知,菜單欄是44像素高,因此yMax應該是900 - 44 = 856像素。根據NSScreen,菜單欄最多可以使用22個像素。那個怎麼樣?


有關我的用例的更多信息:我通過Applescript調整窗口位置和窗口大小。要知道哪些值是允許的,即在可見幀內,我需要檢查NSScreen的可見幀。但是,NSScreen從左下角開始計算像素,而Applescript從左上角開始。在構建NSScreen從左上角返回其座標的過程中,我遇到了這個問題。

變換的可見幀的yMin爲22,因此距離上限爲22個像素。我直接對Applescript進行了實驗,發現每個44以下的yMin都會被調整爲44,因爲菜單欄佔據了從0到43像素的空間。


我希望我的解釋不是太混亂。最後,問題是實驗顯示菜單欄高44像素,而NSScreen僅剩下22個像素可用於菜單欄(因爲它的高度是900像素屏幕上的878像素)。


編輯:菜單欄的高度爲 22像素。發現者如何處理與他的界限有關的事件是一個問題。

+0

我的菜單欄是22像素高(或在該範圍內的東西)。絕對不是44. – 2011-04-23 11:28:24

回答

2

菜單欄是22像素。作爲測試打開文本編輯,其窗口推到屏幕的頂部,然後運行該AppleScript的,你會看到它的22

tell application "TextEdit" 
    bounds of window 1 
end tell 

你看到的問題是如何在Finder中測量其視窗。在10.6改變了一些。看起來窗戶的標題欄沒有被Finder考慮,因此窗戶的明顯的0位不是左上角,而是從該位置向下的一些像素。我也腳本窗口的位置,並注意到我的代碼必須在10.5和10.6之間不同。作爲一個例子,打開Finder窗口,並將它推到你的屏幕的頂部,然後運行該代碼......它顯示了44

tell application "Finder" 
    bounds of window 1 
end tell 

爲了證明它的Finder中,在相同的搜索運行此腳本窗口。注意系統事件與Finder的信息。請記住,在10.5和更早版本中,Finder沒有顯示出這種差異。

tell application "System Events" 
    tell process "Finder" 
     set s to size of window 1 
     set p to position of window 1 
     return {p, s} 
    end tell 
end tell 
+0

你是對的,我用「邊界」屬性來設置和讀取Finder窗口的位置。 「大小」和「位置」屬性按預期工作,但需要啓用輔助功能選項。然而,我自己嘗試了不同的應用程序,並發現,如果使用bounds-property,Xcode窗口將從左下角開始,如果使用position/size-properties,則從左上角開始。看起來我必須跟上尺寸/位置...... – 2011-04-24 08:25:03