gpt4 book ai didi

objective-c - 使用 NSScreens 时如何在全局坐标和局部坐标之间进行转换?

转载 作者:搜寻专家 更新时间:2023-10-30 20:11:09 26 4
gpt4 key购买 nike

我正在编写一个应用程序来操纵窗口位置并添加多显示器支持。

为此,我有“本地”窗口位置(相对于 NSScreen 的框架),我需要将其转换为“全局”窗口位置(相对于指定所有监视器位置的位置,我相信它是 [NSScreen screens] 的第一个(第 0 个)索引的左下角)。

我想使用单一坐标系来存储我的窗口位置,并相对于全局坐标系执行此操作,然后转换为局部坐标系以进行显示。

在 NSScreen 框架和全局屏幕空间之间转换坐标的辅助方法是什么?

最佳答案

听起来您只需要 -[NSScreen frame]。框架的原点是相对于零屏幕的框架原点 ([[NSScreen screens] objectAtIndex:0])。

对了,NSWindow的frame已经在一个相对于零屏frame原点的全局坐标系中了。听起来您可能正在重新发明它,但您这样做可能有充分的理由。

例如,这里有两个函数可以转换全局点和相对于屏幕框架的点:

extern NSPoint MyConvertLocalScreenPointToGlobal(NSScreen *screen, NSPoint local) {
NSPoint global = {
.x = [screen frame].origin.x + local.x,
.y = [screen frame].origin.y + local.y,
};
return global;
}

extern NSPoint MyConvertGlobalScreenPointToLocal(NSScreen *screen, NSPoint global) {
NSPoint local = {
.x = global.x - [screen frame].origin.x,
.y = global.y - [screen frame].origin.y,
};
return local;
}

关于objective-c - 使用 NSScreens 时如何在全局坐标和局部坐标之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8394543/

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