1

我有一个 CGContext,我可以把它变成一个 NSGraphicsContext。我有一个带有clipRect 的NSWindow 作为上下文。

我想将滚动视图放入上下文中,然后将其他一些视图放入滚动视图中,以便我可以将图像放入其中......但是,我无法弄清楚如何将滚动视图附加到上下文中。

最终视图可能来自笔尖,但我不明白这有什么关系。

我看过这个线程,(http://lists.apple.com/archives/quartz-dev/2006/Nov/msg00010.html)但他们似乎放弃了如何将视图附加到上下文中的步骤,除非有什么明显的我错过了。

编辑:

我处于这种情况的原因是我正在编写一个 Mozilla 插件。浏览器给了我一个 CGContext (Quartz) 和一个 WindowRef (QuickDraw)。我可以把CGContext变成一个NSGraphicsContext,我可以把windowRef变成一个NSWindow。从另一个数据结构中,我也有剪切矩形......

我正在尝试将图像绘制到该上下文中,并根据需要使用滚动条以及按钮和其他 UI 元素......所以我需要(想要)一个 NSView......

4

3 回答 3

0

您不能将视图放入图形上下文中。一个视图要么进入另一个视图,要么作为窗口的内容视图。

您可以通过将上下文设置为当前上下文并告诉视图进行绘制来将视图绘制到上下文中。您可能会这样做作为将视图呈现为图像的一种方式,但除此之外,我想不出这样做的理由。(编辑:好的,作为 Netscape 插件可能是一个很好的理由。)

通常,视图在 NSView 的方法实现中获得自己的图形上下文,lockFocus由 为您display调用,由 为您调用displayIfNeeded(显然,仅当视图需要显示时),作为事件的一部分为您调用环形。

您不需要视图创建上下文,除非在非常罕见的情况下,例如我提到的导出到图像的情况。通常,您让视图自己处理。

于 2010-02-26T22:21:44.293 回答
0

部分解决方案?

我目前所做的是在 NSScrollView 内的 IKImageView 中创建一个带有按钮的笔尖。我将它加载到我的插件中。

然后,由于我有 NSWindow,我可以获取窗口的 contentView。然后,我将滚动视图添加为 contentView 的子视图。

看起来,但似乎对原点的位置存在一些坐标混淆。(顶部与底部)并且由于我正在处理整个窗口的内容视图,所以我正在做一些非常全球化的事情,也许我应该在本地做更多的事情。就像,即使您关闭选项卡或转到另一个选项卡,视图也不会消失。(当然,当您关闭窗口时它会关闭)

那么,这听起来像是一种合理的做法吗?感觉有点……笨拙……

于 2010-03-01T21:53:35.243 回答
0

对于后代(以及当我忘记自己是如何做到这一点时,谷歌将我带回到自己的问题时)我是这样做的:

我有一个包含我所有观点的 NIB,我在启动时加载它。

在 SetWindow 上,我设置了剪辑 rect 并实际进行了附加:

NP_CGContext* npContext = (NP_CGContext*) window->window;   
NSWindow* browserWindow = [[[NSWindow alloc] initWithWindowRef:npContext->window] autorelease];

NSView* cView = [browserWindow contentView];
NSView* hitView = [cView hitTest:NSMakePoint(window->x + 1, clip.origin.y + 1)];
if (hitView == nil || ![[hitView className] isEqualToString:@"ChildView"]) 
{
    return;
}

superView = [hitView retain];

[superView addSubview: topView];

[superView setNextResponder: topView];
[topView  setNextResponder: nil];
[browserWindow makeFirstResponder: topView];

为了确保我只 addSubView 一次,我有一个标志......

然后在handleEvent中,我实际绘制,因为我使用的是IKImageView,所以我可以使用未记录的方法:[imageView setImage: image]; 它需要一个 NSImage。

到目前为止,这似乎对我有用。希望这对其他人有帮助。

于 2010-03-03T22:47:46.810 回答