我想用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()。
答案 0 :(得分:2)
您需要将webView
添加到面板大小调整器中。您的问题实际上与wxWebView
没有任何关系,但仅涉及布局,我强烈建议(重新)阅读手册的corresponding section。
答案 1 :(得分:1)
对于有类似问题的人,我的代码的主要问题之一是我在创建菜单栏之前创建了“面板”。通过调用initMenu()作为构造函数中的第一个函数调用,我能够在完整的应用程序窗口中显示webview - 由wxWidgets论坛的着名'doublemax'提供的设备。感谢大家的帮助。