【发布时间】:2017-08-17 18:26:33
【问题描述】:
问题:
如何正确实现自定义wxSciter 控件并将其正确放置在标准wxWidgets 控件中?
(所以它可以像浏览器窗口一样工作)
已解决:
在提供以下建议后我解决了:
class NativeWindow : public wxNativeWindow
{
public:
explicit NativeWindow(wxWindow* parent)
: wxNativeWindow()
{
GtkWidget* widget = SAPI()->SciterCreateWindow(SW_CHILD, NULL, NULL, NULL, this->GetHandle());
g_object_ref_sink(widget);
// remove Sciter's GTK top-level container
// to prevent "Can't set a parent on widget which has a parent"
gtk_container_remove(GTK_CONTAINER(gwindow(widget)), widget);
SAPI()->SciterLoadFile(widget, WSTR("http://linux.org.ru/"));
(void)Create(parent, wxID_ANY, widget);
}
virtual ~NativeWindow()
{
Disown();
}
};
【问题讨论】:
-
看看 wxNativeWindow。它应该为您提供所需的一切。该文档有一个如何做到这一点的例子。但是你为什么需要它? wxWidgets 有 wxWebView 控件,它为开发人员提供 Web 界面。并且目前的GSoC有一个项目要在wx中进一步集成JS。
-
Sciter 并不是真正的浏览器。它是一个小型库,使用 HTML5 的子集和带有动画的 JavaScript 子集来编写桌面应用程序 GUI。与 wxWebView 相比,浏览器引擎保证在所有平台(Windows、macOS、GTK3、iOS 和 Android)上都是相同的。把它想象成 Qt 的 QML/QtQuick。
标签: wxwidgets