Macos 从窗口转换给定点’;s基准坐标系到屏幕坐标系

Macos 从窗口转换给定点’;s基准坐标系到屏幕坐标系,macos,core-graphics,quartz-graphics,macos-carbon,Macos,Core Graphics,Quartz Graphics,Macos Carbon,我试图找出将给定点从窗口的基本坐标系转换为屏幕坐标系的方法。我指的是类似于-(NSPoint)convertBaseToScreen:(NSPoint)point的东西。 但我想要石英/碳纤维的 我有CGContextRef和它的边界。但是边界是关于CGContextRef所属的窗口的。例如,如果窗口位于相对于屏幕的位置(100、100、50、50),则窗口的contextRef将为(0、0、50、50)。i、 我在位置(0,0),但实际上在屏幕上我在(100100)。我 如有任何建议,我们将不

我试图找出将给定点从窗口的基本坐标系转换为屏幕坐标系的方法。我指的是类似于
-(NSPoint)convertBaseToScreen:(NSPoint)point的东西。

但我想要石英/碳纤维的

我有CGContextRef和它的边界。但是边界是关于CGContextRef所属的窗口的。例如,如果窗口位于相对于屏幕的位置(100、100、50、50),则窗口的contextRef将为(0、0、50、50)。i、 我在位置(0,0),但实际上在屏幕上我在(100100)。我

如有任何建议,我们将不胜感激


谢谢。

我不确定您是否可以直接使用CGContextRef,您需要窗口或视图参考或类似的转换。 我使用的代码将鼠标坐标从全局(屏幕)转换为本地,如下所示:

Point mouseLoc; // point you want to convert to global coordinates
HIPoint where; // final coordinates
PixMapHandle portPixMap;
// portpixmap is needed to get correct offset otherwise y coord off at least by menu bar height
portPixMap = portPixMap = GetPortPixMap( GetWindowPort( GetControlOwner( view ) ) );
QDGlobalToLocalPoint(GetWindowPort( GetControlOwner( view ), &mouseLoc);
where.x = mouseLoc.h - (**portPixMap).bounds.left;
where.y = mouseLoc.v - (**portPixMap).bounds.top;
HIViewConvertPoint( &where, NULL, view );
所以我想你需要相反的方法(还没有测试它是否真的有效):


我不确定是否可以直接使用CGContextRef,您需要窗口或视图引用或类似的东西来进行转换。 我使用的代码将鼠标坐标从全局(屏幕)转换为本地,如下所示:

Point mouseLoc; // point you want to convert to global coordinates
HIPoint where; // final coordinates
PixMapHandle portPixMap;
// portpixmap is needed to get correct offset otherwise y coord off at least by menu bar height
portPixMap = portPixMap = GetPortPixMap( GetWindowPort( GetControlOwner( view ) ) );
QDGlobalToLocalPoint(GetWindowPort( GetControlOwner( view ), &mouseLoc);
where.x = mouseLoc.h - (**portPixMap).bounds.left;
where.y = mouseLoc.v - (**portPixMap).bounds.top;
HIViewConvertPoint( &where, NULL, view );
所以我想你需要相反的方法(还没有测试它是否真的有效):


窗口在全局屏幕空间中保持自己的位置,合成器知道如何将该窗口的图像放置在屏幕空间中的正确位置。但是,上下文本身没有位置

Quartz合成器知道窗口在屏幕上的位置,但Quartz 2D只知道它应该绘制的区域有多大。它不知道石英合成器将把画放在哪里,一旦它完成


类似地,当组合窗口的内容时,框架提供了视图系统。视图系统允许操作系统创建用于绘制窗口各个部分的上下文,并管理在这些视图中绘制结果的位置,通常通过操纵上下文的转换或创建临时屏幕外上下文。但是,上下文本身不知道最终图形将在何处渲染。

窗口在全局屏幕空间中保持自己的位置,合成器知道如何将该窗口的图像放置在屏幕空间中的正确位置。但是,上下文本身没有位置

Quartz合成器知道窗口在屏幕上的位置,但Quartz 2D只知道它应该绘制的区域有多大。它不知道石英合成器将把画放在哪里,一旦它完成


类似地,当组合窗口的内容时,框架提供了视图系统。视图系统允许操作系统创建用于绘制窗口各个部分的上下文,并管理在这些视图中绘制结果的位置,通常通过操纵上下文的转换或创建临时屏幕外上下文。但是,上下文本身不知道最终图形将在何处呈现。

是否可以使用窗口管理器和辅助功能API执行某些操作?是否可以使用窗口管理器和辅助功能API执行某些操作?