Mac鼠标坐标!=窗框?

时间:2010-12-20 18:05:48

标签: macos mouse desktop coordinates multiple-monitors

这是我的问题。希望我能够很好地解释它。我的桌面是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 个答案:

答案 0 :(得分:3)

在Mac上,(0,0)位于左下角。你是如何获得鼠标坐标的?窗口的框架将位于屏幕坐标中,因此如果该点位于其基准坐标中,则需要在比较之前调用point = [window convertBaseToScreen:point];

以下是在cocoa中获取鼠标位置的两种方法:

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];