如何解决浏览器插件中的Directx控件
| 我必须将DirectX控件插入到用于浏览器的firebreath插件中。 任何人都可以张贴样品该怎么做?我对插件一无所知... 10倍解决方法
我没有可以给您的例子,但是我可以大致告诉您您需要做什么。
首先,请阅读以下内容:http://colonelpanic.net/2010/11/firebreath-tips-drawing-on-windows/
这将使您大致了解绘图在FireBreath中的工作方式。
首先,您在处理AttachedEvent时设置了所有内容。
创建一个新的线程来处理图形(您的DirectX图形不能在主线程上)
从PluginWindowWin对象获取HWND(将FB :: PluginWindow *广播到FB :: PluginWindowWin并调用getHWND())
使用提供的HWND在辅助线程上初始化DirectX。设置某种形式的渲染循环,并确保可以从主线程发送命令。
通过以某种方式将消息发布到渲染线程来处理RefreshEvent(来自WM_PAINT),以便在触发该事件时重新绘制消息。
确保在DetachedEvent上关闭线程。
您需要在同一线程上完成DirectX东西的所有初始化,绘制和关闭。这需要全部在不只是主线程的线程上发生(不要仅使用计时器),因为否则,它将使某些版本的Firefox浏览器呈现上下文混乱(不知道为什么)。
无论如何,希望这会有所帮助。
编辑:要将参数传递给boost :: thread的开始,如果这是您决定使用的线程抽象,只需将其作为参数传递即可。
boost::thread t(&MyClass::someFunction,this,theHWND);
那将启动线程。实际上,您可能希望使线程成为类变量或某种东西,以便以后可以访问它-请记住,您希望线程在处理DetachedEvent时已停止。对于消息,我可能会使用FB :: SafeQueue,这是FireBreath的一部分,是线程安全队列。查看有关如何使用它的资源。它非常简单(我认为是从代码项目文章中窃取的)。
// Inside MyClass
void someFunction(HWND theHWND) {
...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。