使用wxWebView填充窗口

时间:2013-07-20 20:24:00

标签: c++ wxwidgets

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

main.h

#ifndef MAIN_H
#define MAIN_H

#include <wx/wx.h>

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


DECLARE_APP(MyApp)
#endif

的main.cpp

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

IMPLEMENT_APP(MyApp)

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

    return true;
}

mainframe.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

mainframe.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);
}

以下是此处创建的应用程序的屏幕截图:Screenshot

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

感谢。

编辑:

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

编辑2:

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

2 个答案:

答案 0 :(得分:2)

您需要将webView添加到面板大小调整器中。您的问题实际上与wxWebView没有任何关系,但仅涉及布局,我强烈建议(重新)阅读手册的corresponding section

答案 1 :(得分:1)

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