我想用 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() 。