Я хотел бы заполнить окно приложения, созданное с помощью wxWidgets с помощью wxWebView. Просмотрев образец wxWebView, автор создал wxFrame, который затем содержал wxBoxSizer, и wxWebView был добавлен непосредственно к этому. Однако я хотел бы, чтобы мое приложение использовало wxSingleChoiceDialog, насколько я могу судить, это означает, что мне нужно включить что-то вроде wxPanel для использования в качестве родителя диалогового окна (первым аргументом для конструктора является «родительский» тип wxWindow). Поэтому в моем приложении я поместил wxPanel в wxFrame, а затем установил wxBoxSizer из wxPanel для включения wxWebView. К сожалению, теперь 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, чтобы указать размер, который будет равен размеру окна, но тогда, когда пользователь изменит размер экрана, веб-просмотр больше не будет такого же размера, как и окно приложения.
Спасибо.
EDIT:
Кроме того, я использую WxWidgets версии 2.9.4
EDIT 2:
Оказывается, что вызов initEditor() перед InitMenu() производит желаемый результат (но не наоборот). Кто-нибудь знает, в чем причина этого? Мне бы очень хотелось сначала вызвать initMenu(), если это возможно.
Возможно ли, что это поведение является ошибкой в версии 2.9.4 wxWidgets? Кажется, wxWebView может быть относительно новым для wxWidgets. Возможно, исправление до сборки соединительной линии исправить? – user2027202827
Я попытался использовать wxPanel вместо wxWebView и столкнулся с той же проблемой, что и панель, отображаемая в верхнем левом углу экрана, поэтому кажется, что мои проблемы связаны с моим кодом. С этой добавленной информацией кто-нибудь видит, где я могу ошибаться? – user2027202827
При создании вашего wxSingleChoiceDialog вы должны передать указатель на свой кадр как на родителя, а не на wxPanel. – SteveL