【问题标题】:wxWidgets: integrate custom GTK+ widgetwxWidgets:集成自定义 GTK+ 小部件
【发布时间】: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


【解决方案1】:

wxNativeWindow 通常可以让您轻松完成所需的工作。您可以找到比小部件示例中的文档中给出的更完整的使用示例,请参阅其GTK-specific part

【讨论】:

  • 瓦迪姆,感谢您的快速回复。在 Linux 发行版上,我们仍然在包存储库中拥有 wxWidgets 3.0,因为 3.1 未标记为稳定版。 wxNativeWindow 出现在 3.1 中,我将尝试使用 wxNativeWindow 类中使用的方法,并在明天用结果更新这个问题。
  • 我认为您应该能够将src/gtk/nativewin.cpp 放入您的项目中并与 3.0 一起使用,所以这值得尝试,即使我还没有实际测试它是否有效.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
相关资源
最近更新 更多