gpt4 book ai didi

objective-c - 获取鼠标的视网膜坐标

转载 作者:行者123 更新时间:2023-12-01 22:23:10 50 4
gpt4 key购买 nike

我一直在使用[NSEvent mouseLocation]来获取鼠标在常规屏幕上的当前位置。我注意到,当我升级并使用 Retina 屏幕时,我得到的是点坐标,而不是像素坐标。我明白为什么这是不同的,但我真的很想获得像素坐标中的鼠标坐标。

为此,我是否只需使用scalingFactor 来平移鼠标坐标。或者有更干净的方法吗?

非常感谢任何帮助。

解决方案

NSPoint location = [NSEvent mouseLocation];

for (id screen in [NSScreen screens]) {
if (NSMouseInRect(location, [screen frame], NO)) {
NSSize size = {1, 1};
NSRect mouseRect = {location, size};
NSRect retinaMouseRect = [screen convertRectToBacking:mouseRect];

NSLog(@"Mouse Rect = %@", NSStringFromRect(mouseRect));
NSLog(@"Retina Mouse Rect = %@", NSStringFromRect(retinaMouseRect));
}
}

最佳答案

迭代[NSScreen Screens]中的屏幕,找到NSMouseInRect(mouseLocation, [screen frameRect], NO)为true的屏幕。从鼠标位置点创建一个 NSRect,大小可能为 (1, 1)。然后执行[screen ConvertRectToBacking:rect]将其转换为屏幕的帧缓冲区坐标。

请注意,这是相对于该屏幕的原点,而不是所有屏幕所在的全局坐标空间。全局坐标空间以点为单位,因此没有明确的方法来计算全局物理坐标。例如,考虑用户有四个屏幕的情况,一个在左侧,两个在中间(一个在另一个顶部),第四个在右侧。假设左侧显示器是主显示器,因此是全局坐标空间的原点。假设中间的两个具有相同的点数尺寸,但一个是高分辨率,另一个不是。假设光标位于右侧显示屏上。右侧显示器的物理全局坐标应该是多少?它应该是主显示屏的右边缘加上中上显示屏或中下显示屏的像素宽度吗?

关于objective-c - 获取鼠标的视网膜坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21949021/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com