大型应用程序插件中的CEF关闭/调整大小问题
CEF closing/resizing issues inside a big application plugin
我正在用C++为一个大型x64应用程序编写一个插件。我希望插件打开一个对话框,并显示我的网站的网页视图。我已经能够在macOS中使用WKWebView,它运行得很好。在Windows上,我正在评估CEFhttps://bitbucket.org/chromiumembedded/cef(请让我知道任何替代方案,理想情况下我希望它是基于Webkit的)。
假设托管我的插件的应用程序框架已经为我的插件创建了一个窗口,并且有自己的消息循环,所以我只能在某种WindowProc中接收事件。我还可以得到窗口的HWND。
我的实现受到了cefssimple示例的启发,因为cefclient太复杂了。我已经用外部可执行文件实现了子流程体系结构,在呈现窗口的客户端区域之前,一切都很好。然后我在关闭窗口(它崩溃了)和交互式调整窗口大小方面遇到了问题(窗口框架被调整了大小,但客户端区域的web视图没有调整大小)。
我试过了所有可能的组合,但我已经没有主意了。即:
- 如果我使用CefRunMessageLoop(),web视图将正确呈现,但主应用程序不会处理UI事件,如关闭窗口按钮。调整大小不起作用
- 如果我偶尔(从WindowProc)自己调用CefDoMessageLoopWork(),web视图会正确呈现,它会处理关闭按钮,但会崩溃。调整大小不起作用
- 如果我使用settings.multi_thread_message_loop=true,则web视图将正确呈现,并且我可以关闭窗口而不会崩溃。该窗口的析构函数调用CefShutdown()。但如果我试图重新打开窗户,它就会崩溃!是否只允许调用CefInitialize和CefShutdown一次?调整大小仍然不起作用。我不明白为什么在这个简单的例子中,调整大小是有效的,而在我的窗口中却不起作用
除了消息处理问题,我可能没有正确关闭浏览器,有什么建议吗?为什么这么复杂?WKWebView太向前了!
没有错误消息,没有堆栈跟踪,没有源代码,没有OS/CEF版本-我怀疑这个问题能否得到回答。
我只能告诉你如何干净地关闭浏览器:在正确的时间调用CefShutdown(请参阅cefclient/cefsimple示例),并且在调用shutdown时不要保留对CEF对象的任何引用。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 我的C++程序有问题.涉及动态调整整数数组的大小
- OPENCV C 调整问题
- 调整动态数组大小时保留用户输入的值的问题
- 调整TAB大小控制闪烁问题
- 特征,实现阻尼伪逆时的矩阵大小调整问题
- 滚动条缩略图跟踪长度 基于图像的水平适合调整窗口大小时出现问题
- 当在拖动/调整窗口大小的同时对窗口调用isActive()时,返回false.(X11,问题5.4.0)
- 调整窗口大小后交换渲染缓冲区会导致问题
- 用std::vector编写可调整大小的矢量时出现问题
- 问题:如何在调整centralwidget的大小时使mainWindow自动调整大小
- 在wxGLCanvas上调整大小之前初始化着色器时出现问题
- QWidget调整大小问题
- 滚动区域中的大小调整问题
- gpu的问题:调整大小
- 动态数组调整大小函数问题
- 为调整堆栈大小分配内存时出现问题
- Qt调整窗口大小以适应滚动区域问题中的纵横比
- 大型应用程序插件中的CEF关闭/调整大小问题