2010-12-20 215 views
2

这是我的问题。希望我可以解释得很好。我的桌面是一个2x2的显示器(2048,1152)。Mac鼠标坐标!=窗框?

我正在尝试使用辅助设备来生成鼠标点击。假设(0,0)是我整个桌面区域的左上角,我的鼠标点击应该在坐标(1600,1407)-ish(在“平移按钮”上)。它将鼠标移动到正确的位置,但是当我执行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

作为一个结果,它仍然没有放置点(我可以看到悬停在弹出窗口上)的矩形。

为什么我的弹出窗口的矩形和点甚至不是相同的?我怎样才能让他们在同一个坐标“空间”?

谢谢,

回答

3

在mac上,(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]; 
+0

你确定它的左下角?如果我创建了'CGEventRef m = CGEventCreateMousEvent()',并且我将它传递给一个坐标,其中y>屏幕高度显示在左下角的屏幕中。 – 2010-12-20 20:20:22

+1

这取决于你使用的是什么系统。 Carbon(你用来获取位置的)使用top作为0,而Cocoa(你用来获取窗口位置)使用bottom作为0.我将编辑我的帖子以显示如何从可可中获得鼠标。 – ughoavgfhw 2010-12-20 20:51:50