【问题标题】:Mac Mouse Coordinates != Window Frame?Mac鼠标坐标!=窗口框架?
【发布时间】:2010-12-20 18:05:48
【问题描述】:

这是我的问题。希望我能解释得足够好。我的桌面是 2x2,显示器尺寸为 (2048,1152)。

我正在尝试使用辅助设备来生成鼠标点击。我的鼠标点击应该在坐标 (1600,1407) 上(在“平移按钮”上),假设 (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

因此,它仍然没有将点(我可以看到它悬停在弹出窗口上)放在矩形中。

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

谢谢,

【问题讨论】:

    标签: macos mouse desktop coordinates multiple-monitors


    【解决方案1】:

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

    【讨论】:

    • 你确定是左下角吗?如果我创建一个CGEventRef m = CGEventCreateMousEvent() 并传递给它一个坐标,其中 y > 屏幕高度,它会显示在左下角的屏幕中。
    • 这取决于您使用的系统。 Carbon(用于获取位置)将顶部用作 0,而 Cocoa(用于获取窗口位置)将底部用作 0。我将编辑我的帖子以展示如何从 Cocoa 获取鼠标.
    猜你喜欢
    • 2012-06-06
    • 2015-01-29
    • 1970-01-01
    • 2023-03-31
    • 2011-12-09
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多