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];
}

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

有什么建议吗?

提前致谢。

4

2 回答 2

0

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.

于 2010-11-28T14:15:22.337 回答
0

smorgan 的回答是对的。

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

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

谢谢斯摩根。

于 2010-12-01T14:23:42.097 回答