2

我想用 wxWebView 填充使用 wxWidgets 创建的应用程序窗口。在查看了 wxWebView 示例后,作者创建了一个 wxFrame,其中包含一个 wxBoxSizer,并直接向其中添加了一个 wxWebView。但是我希望我的应用程序使用 wxSingleChoiceDialog,据我所知,这意味着我需要包含类似 wxPanel 的东西作为对话框的父级(构造函数的第一个参数是 wxWindow 类型的“父级” )。所以在我的应用程序中,我在 wxFrame 中放置了一个 wxPanel,然后将 wxPanel 的 wxBoxSizer 设置为包含 wxWebView。不幸的是,现在 wxWebView 不再适合完整的应用程序窗口,我不知道为什么。这是我正在尝试创建的应用程序的简化示例。

主文件

#ifndef MAIN_H
#define MAIN_H

#include <wx/wx.h>

class MyApp : public wxApp
{
public:
    virtual bool OnInit();
};


DECLARE_APP(MyApp)
#endif

主文件

#include "main.h"
#include "mainframe.h"

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
    MainFrame *mainFrame = new MainFrame(wxT("Content Creator"));
    mainFrame->Show(true);

    return true;
}

大型机.h

#ifndef MAINFRAME_H
#define MAINFRAME_H

#include <wx/wx.h>
#include <wx/webview.h>

class MainFrame : public wxFrame
{
public:
    wxPanel *panel;
    wxBoxSizer *topsizer;
    wxMenuBar *menubar;
    wxMenu *file;
    wxWebView *webView;
    wxString editorURL;

    MainFrame(const wxString& title);
    void initMenu();
    void initEditor();
};
#endif

大型机.cpp

#include "mainframe.h"

MainFrame::MainFrame(const wxString& title)
    : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(800,600))
{
    panel = new wxPanel(this, -1);
    topsizer = new wxBoxSizer(wxVERTICAL);
    panel->SetSizer(topsizer);

    initMenu();
    initEditor();
}

void MainFrame::initMenu()
{
    menubar = new wxMenuBar;

    file = new wxMenu;
    //file->Append(wxID_EXIT, wxT("Quit"));
    menubar->Append(file, wxT("File"));

    SetMenuBar(menubar);
}

void MainFrame::initEditor()
{
    editorURL = "file:///C:/Users/kenwood/Desktop/MarkCreator2/ckeditor/samples/editor.html";
    webView = wxWebView::New(panel, wxID_ANY, editorURL);
    topsizer->Add(webView, 1, wxEXPAND | wxALL, 0);
}

这是此创建的应用程序的屏幕截图:屏幕截图

有谁知道我如何能够让这个 wxWebView 填充应用程序窗口(或者至少为什么它不适合窗口,因为我显然在这里遗漏了一些东西)?我意识到我可以创建一个 wxWebView 并指定与窗口大小相等的 aa 大小,但是当用户调整屏幕大小时,webview 不再与应用程序窗口大小相同。

谢谢。

编辑:

另外,我正在使用 wxWidgets 版本 2.9.4

编辑2:

似乎在 initMenu() 之前调用 initEditor() 会产生所需的结果(但不是相反)。有人知道这是什么原因吗?如果可能的话,我真的很想先调用 initMenu() 。

4

2 回答 2

3

您需要添加webView到面板大小调整器。您的问题实际上与布局无关,wxWebView只是与布局有关,我强烈建议(重新)阅读手册的相应部分

于 2013-07-20T23:56:34.673 回答
2

对于任何有类似问题的人,我的代码的主要问题之一是我在创建菜单栏之前创建了“面板”。通过调用 initMenu() 作为构造函数中的第一个函数调用,我能够让 webview 显示在完整的应用程序窗口中——由 wxWidgets 论坛的杰出“doublemax”提供的建议。感谢大家的帮助。

于 2013-07-21T19:27:23.853 回答