2012-09-19 68 views
0

我創建了一個使用NPAPI的safari插件,我想在我的插件中添加一個NSView。如何創建一個窗口插件?

當我試圖獲得NPWindow拋出函數NPP_SetWindow(NPP實例,NPWindow *窗口),第二個參數是nil。

我覺得我的插件沒有窗口,但我不知道如何創建窗口。

回答

0

Mac上的NPAPI不​​支持NSView作爲窗口模式。有兩種支持方式:

曾經有一個QuickDraw的模式,但是這不推薦使用。請參閱Stuart Morgan's excellent blog post on the subject

有可能使一個NSView渲染到CoreGraphics上下文中,但是你必須代理所有的事件,而且它遠非完美。

編輯:爲了進一步解釋你的問題的答案,窗口參數爲NULL的原因=])是因爲在Cocoa Event Model中,您將得到一個CGContextRef作爲draw event的一部分,它只在該事件的上下文中有效。

+0

你好@taxilian!我想知道爲什麼第二個參數「窗口」是零?我從蘋果開發者文檔中找到下面的代碼,但現在它不能工作。我想念什麼? NPError setwindow_cb(NPP instance,NPWindow * npw){ ... NP_CGContext * npcontext = npw.window; CGContextRef context = npcontext.context; CGRect boundingBox = CGContextGetClipBoundingBox(context); – Magical

+0

您錯過了窗口現在爲NULL的可可的更新,並且您將CGContextRef作爲事件的一部分。查看https://wiki.mozilla.org/NPAPI:CocoaEventModel – taxilian

+0

非常感謝你,taxilian。** NPWindow **對我來說非常重要,因爲我的播放器是通過導出函數'void SetHwnd(void * hWnd,CGRect rect)'在我的插件中。如果CGContextRef只能用,我應該重寫一個新的函數? – Magical