如何使用 CGContext 获取全局(屏幕、设备)坐标?

发布于 2024-10-03 11:25:29 字数 706 浏览 10 评论 0原文

我尝试为 Mac OSX 中的浏览器制作一个插件。

我从浏览器进程中获得了 CGContext 。

所以我可以用它画画。

我要做的就是制作一个用于事件处理的窗口,有人在这个令人惊叹的网站中向我建议:)

我可以轻松制作一个透明窗口,但我可以将该窗口移动到适当的位置。

我确切地知道窗口的大小,但我可以确定窗口的原点。

我唯一得到的是 CGContextRef。

我试过这个。

NSRect rect = [mywindow frame];

CGPoint origin;
origin.x = rect.origin.x;
origin.y = rect.origin.y;

CGPoint globalOrigin = CGContextConvertPointToDeviceSpace(cgContext, origin);

if (globalOrigin.x != origin.x || globalOrigin.y != origin.y) {
    NSPoint newPoint; 
    newPoint.x = globalOrigin.x;
    newPoint.y = globalOrigin.y;
    [mywindow setFrameOrigin:newPoint];
}

但没有运气。它返回了我给它的值 有

什么建议吗?

提前致谢。

I try to make a plugin for browsers in Mac OSX.

I got a CGContext from browser process.

So I can draw with it.

What I have to do is make a window for event handling someone advise me in this amazing site :)

I can make a transparent window easily but I can move that window proper position.

I know the size of window exactly but I can determine the origin of window.

Only thing I got is CGContextRef.

I tried this.

NSRect rect = [mywindow frame];

CGPoint origin;
origin.x = rect.origin.x;
origin.y = rect.origin.y;

CGPoint globalOrigin = CGContextConvertPointToDeviceSpace(cgContext, origin);

if (globalOrigin.x != origin.x || globalOrigin.y != origin.y) {
    NSPoint newPoint; 
    newPoint.x = globalOrigin.x;
    newPoint.y = globalOrigin.y;
    [mywindow setFrameOrigin:newPoint];
}

But no luck. It returned the value what I gave it to

Any advice?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

∞琼窗梦回ˉ 2024-10-10 11:25:29

您在 NPAPI 插件中获得的 CGContext 不一定与任何窗口关联,因此不可能从 CGContext 映射到屏幕上的位置。

The CGContext you get in an NPAPI plugin is not necessarily associated with any window, so it's impossible to map from the CGContext to a location on screen.

奶茶白久 2024-10-10 11:25:29

斯摩根的回答是正确的。

对于可能需要更多解释的人,我将添加我的想法。

我认为插件进程有 CGContext,它没有真正的操作系统窗口。因为浏览器进程需要窗口,而插件进程只是将绘图数据传输到浏览器进程,所以插件进程的 CGContext 没有位置。它可能只是内存缓冲区。

谢谢斯摩根。

smorgan's answer is right.

For someone who maybe need more explanations, I will add my thinking.

I think plugin process has CGContext which doesn't have real os window. because browser process need window but plugin process just transfer drawing data to browser process, so plugin process's CGContext does NOT have location. It might be just memory buffer.

Thanks smorgan.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文