我想用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

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;
}

主机
#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

主框架
#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()。

最佳答案

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

关于c++ - 用wxWebView填充窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17766358/

10-10 19:17