这是我的问题。希望我能够很好地解释它。我的桌面是2x2,显示器大小(2048,1152)。
我正在尝试使用辅助设备来生成鼠标点击。我的鼠标点击应该在坐标(1600,1407)-ish(在“平移按钮”上),假设(0,0)是我整个桌面区域的左上角。它将鼠标移动到正确的位置,但当我执行CGREctContainsPoint()
时,它会给我NO
。
我的弹出窗口给出的矩形(框架)的原点是(1558,-406)?因此CGREctContainsPoint()
的数学运算正确,但窗口的框架应该包含该点。 (甚至更多,因为我可以在窗口上看到鼠标光标。)
为什么呢?是因为它是儿童窗户吗? (我桌面的中心位于图像的中心,每个窗口都是不同的背景颜色。)
我尝试过使用以下内容:
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
因此,它仍然没有在矩形中放置点(我可以看到悬停在弹出窗口上)。
为什么弹出窗口的矩形和点甚至远远不一样?如何将它们放在相同的坐标“空间”中?
谢谢,
答案 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];