Mac Mouse Coordinates! = Оконная рама? - PullRequest
2 голосов
/ 20 декабря 2010

Вот моя проблема.Надеюсь, я смогу объяснить это достаточно хорошо.Мой рабочий стол 2x2 с мониторами размера (2048,1152).

Я пытаюсь использовать вспомогательное устройство для генерации щелчков мыши.Предполагается, что мой щелчок мыши имеет координаты (1600,1407) -ish (на «кнопке панорамирования»), предполагая (0,0) в верхнем левом углу всей области моего рабочего стола.Он перемещает мышь в правильное положение, но когда я выполняю CGREctContainsPoint()), в результате получается NO.

Прямоугольник (рамка), данный моим всплывающим окном, имеет происхождение1558, -406)?Таким образом, математика верна для CGREctContainsPoint(), но рамка окна должна содержать точку.(тем более, что я вижу курсор мыши над окном.)

Почему?Это потому что это дочернее окно?(центр моего рабочего стола находится в центре изображения, каждое окно имеет свой цвет фона.) center of my desktop is in center of the image, each window is a different background color.

Я попытался использовать следующее:

NSRect pFrame = [_popupWindow frame];
NSPoint pOrigin = pFrame.origin;
NSPoint correctedOrigin = [[_popupWindow parentWindow] convertBaseToScreen:pOrigin];
pFrame.origin = correctedOrigin;

, но это дает мне:

... Rect {{1488, -1529}, {439, 306}}, Point {1556.17, 1314.76}, InRect 0

в результате, который все еще не помещает точку (которую я вижу, зависшую над всплывающим окном) в прямоугольнике.

Почему прямоугольник для моего всплывающего окна и точка не совпадают удаленно?Как я могу получить их в той же координате "пробел"?

Спасибо,

1 Ответ

3 голосов
/ 20 декабря 2010

На маке (0,0) в левом нижнем углу. Как вы получаете координаты мыши? Рамка окна будет в экранных координатах, поэтому, если точка находится в ее базовых координатах, вам нужно позвонить point = [window convertBaseToScreen:point]; перед сравнением.

Вот два способа определить местоположение мыши в какао:

NSPoint location = [NSEvent mouseLocation];
//already in screen coordinates, no need to convert

или

//window is a variable containing your window
NSPoint location = [window mouseLocationOutsideOfEventStream];
//convert to screen coordinates
location = [window convertBaseToScreen:location];
...