2011-04-23 2 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 и узнал, что каждый yMin ниже 44 будет настроен на 44, так как строка меню занимает пространство от 0 до 43 пикселей.


Надеюсь, мои объяснения не были слишком запутанными. В конце концов, проблема заключается в том, что эксперименты показывают, что панель меню имеет высоту 44 пикселя, а NSScreen оставляет только 22 пикселя для строки меню (так как высота составляет 878 пикселей на экране с 900 пикселями).


EDIT: Высота строки меню является 22 пикселя. Проблема искателя заключается в том, как он обрабатывает события, связанные с его границностью.

+0

Моя строка меню высотой 22 пикселя (или что-то в этом диапазоне). Определенно не 44. –

ответ

2

Строка меню 22 пикселя. В качестве теста открыть TextEdit, нажмите ее окно в верхней части экрана, а затем запустить этот 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 окно. Обратите внимание на информацию из System Events и 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

Вы правы, я использовал свойство «bounds», чтобы установить и прочитать положение окна Finder. Свойства «размер» и «позиция» работают по назначению, но требуют, чтобы опция доступности была включена. Однако я сам экспериментировал с различными приложениями и обнаружил, что окна Xcode начинаются с нижнего левого, если используется свойство bounds-property, и из верхнего левого, если используются свойства position/size. Похоже, мне нужно идти с размером/положением ... –

Смежные вопросы