我正在编写一个应用程序,用于操作窗口位置并添加多显示器支持。
为方便起见,我有“本地”窗口位置(相对于NSScreen的框架),我需要将其转换为“全局”窗口位置(相对于指定所有监视器位置的位置,我相信它是[NSScreen屏幕]的第一个(第0个)索引的左下角。
我想使用单个坐标系来存储我的窗口位置,并相对于全局坐标系执行此操作,然后转换为本地坐标系进行显示。
在NSScreen框架和全局屏幕空间之间转换坐标有哪些辅助方法?
答案 0 :(得分:3)
听起来你只需要 - [NSScreen框架]。帧的原点是相对于零屏幕的帧原点([[NSScreen screens] objectAtIndex:0])。
顺便说一下,NSWindow的框架已经处于相对于零屏幕的框架原点的全局坐标系中。听起来你可能正在重塑它,但你可能有充分的理由去做。
作为一个例子,这里有两个函数可以转换全局点,并相对于屏幕的框架点:
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;
}