【发布时间】:2012-09-19 10:12:35
【问题描述】:
我使用 NPAPI 创建了一个 safari 插件,我想在我的插件中添加一个 NSView。
当我尝试获取NPWindow throw函数NPP_SetWindow(NPP instance, NPWindow* window)时,第二个参数为nil。
我认为我的插件是无窗口的,但我不知道如何创建窗口。
【问题讨论】:
标签: npapi browser-plugin windowless windowed
我使用 NPAPI 创建了一个 safari 插件,我想在我的插件中添加一个 NSView。
当我尝试获取NPWindow throw函数NPP_SetWindow(NPP instance, NPWindow* window)时,第二个参数为nil。
我认为我的插件是无窗口的,但我不知道如何创建窗口。
【问题讨论】:
标签: npapi browser-plugin windowless windowed
Mac 上的 NPAPI 不支持将 NSView 作为窗口模式。有两种支持的模式:
以前有 QuickDraw 模式,但已弃用。
有关详细信息,请参阅Stuart Morgan's excellent blog post on the subject。
可以将 NSView 渲染到 CoreGraphics 上下文,但您必须代理所有事件,这远非完美。
编辑:为了进一步解释您的问题的答案,window 参数为 NULL 的原因(它是 C api,而不是 Obj C,所以它是 NULL,而不是 nil...尽管有它们是同一件事 =]) 是因为在 Cocoa Event Model 中,您会获得一个 CGContextRef 作为 draw event 的一部分,这仅在该事件的上下文中有效。
【讨论】:
void SetHwnd(void *hWnd, CGRect rect)创建的。如果只有CGContextRef可以使用,我应该重写一个新函数吗?