gpt4 book ai didi

objective-c - 使用多个屏幕时光标从本地坐标变形

转载 作者:行者123 更新时间:2023-12-03 17:47:59 24 4
gpt4 key购买 nike

我正在尝试使用 NSWindow 本地坐标来扭曲鼠标(但我是从 px 而不是 pt 中的本地坐标开始,并且 y 轴相反)。

-(void)setProperRelativeMouseLocationTo:(NSPoint)loc
{
CGFloat scale = [[m_window screen] backingScaleFactor];
NSPoint point = NSMakePoint(loc.x / scale, loc.y / scale);

point.y = [m_view frame].size.height - point.y;

NSRect rect = NSZeroRect;
rect.origin = point;
rect = [m_window convertRectToScreen:rect];
point = rect.origin;

const float screenHeight = [[m_window screen] frame].size.height;
point.y = screenHeight - point.y;

warpCursor(point);
}

void warpCursor(NSPoint loc)
{
CGPoint newCursorPosition = CGPointMake(loc.x, loc.y);
CGWarpMouseCursorPosition(newCursorPosition);
}

但是,在我的一个屏幕上,结果出乎意料,x 轴是正确的,但 y 轴偏离了 280pt。该值不是随机的,它对应于我正在使用的两个屏幕之间的间隙:左侧是 1280*800 (pt),第二个是 1920*1080 (pt)(左边的背景比例因子为 2,右边的背景比例因子为 1)。

在左侧屏幕上,鼠标准确地扭曲到它应该在的位置(如果我读取它的本地坐标,它们对应于我要求它扭曲到的坐标)。

最佳答案

Cocoa 屏幕坐标的原点位于主屏幕的左下角。核心图形坐标的原点位于主屏幕的左上角。因此,您必须使用主屏幕的高度在两者之间进行转换。

你有:

  const float screenHeight = [[m_window screen] frame].size.height;
point.y = screenHeight - point.y;

您需要:

  const float screenHeight = [[NSScreen screens][0] frame].size.height;
point.y = screenHeight - point.y;

关于objective-c - 使用多个屏幕时光标从本地坐标变形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42633745/

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