wxWidgets教程(18)——wxWizard与wxWebView使用方法

一、创建向导对话框wxWizard

1、创建一个带有位图的向导对话框

// 给向导对话框定义一个ID
#define wxID_WIZARD wxID_HIGHEST + 2
	// 向导图,位于向导对话框的左侧
	wxBitmap bitmap;
	bitmap.CopyFromIcon(wxICON(MAIN_ICON));

	wxWizard wizard;
	wizard.Create(this, wxID_WIZARD, wxT("向导设置"), bitmap);
	
	// 设置向导图参数
	wizard.SetBitmapBackgroundColour(wxColour(255,0,0));
	wizard.SetBitmapPlacement(wxCENTER);
	wizard.SetMinimumBitmapWidth(200);
注:这里有个bug,如果没有在构造函数中设置位图,那么将无法设置位图,SetBitmap函数使用不生效。

2、设置向导对话框中的页面大小

	// 设置向导页的尺寸大小
	wizard.SetPageSize(wxSize(600, 400));
	wizard.SetSizeHints(wxDefaultSize, wxDefaultSize);
3、添加2个向导页面,并设置好上一页与下一页的页面

	wxWizardPageSimple* page1 = new wxWizardPageSimple(&wizard);
	wxWizardPageSimple* page2 = new wxWizardPageSimple(&wizard);
	page1->SetNext(page2);
	page2->SetPrev(page1);
4、居中运行第一个页面

	// 居中并运行
	wizard.Centre(wxBOTH);
	wizard.RunWizard(page1);

5、事件响应

wxEVT_WIZARD_PAGE_CHANGED
wxEVT_WIZARD_PAGE_CHANGING
wxEVT_WIZARD_CANCEL
wxEVT_WIZARD_HELP
wxEVT_WIZARD_FINISHED
wxEVT_WIZARD_PAGE_SHOWN
wxEVT_WIZARD_BEFORE_PAGE_CHANGED
这些事件可以传递到父窗口,如果你没有从wxWizard类继承的话,那么可以让wxWizard的父窗口MyFrame的事件表来响应,代码如下:

BEGIN_EVENT_TABLE(MyFrame, MainFrame)
	EVT_WIZARD_FINISHED(wxID_WIZARD, MyFrame::OnFinished)
	EVT_WIZARD_CANCEL(wxID_WIZARD, MyFrame::OnCancel)
END_EVENT_TABLE()

void MyFrame::OnFinished(wxWizardEvent& event) {
	wxLogDebug(wxT("完成"));
}

void MyFrame::OnCancel(wxWizardEvent& event) {
	wxLogDebug(wxT("取消"));
}

当然你也可以从wxWizard类继承一个子类MyWizard,单独另建一个文件,事件表都是独立处理的,而且可以重写父类wxWizard的方法。

6、修改底部的按钮文字

// 修改按钮文字的宏
#define WIZARD_BTN_TEXT(wizard,itemid,label) ((wxButton*)(wizard->FindItem(itemid)))->SetLabelText(label)

BEGIN_EVENT_TABLE(MyFrame, MainFrame)
	EVT_WIZARD_PAGE_CHANGED(wxID_WIZARD, MyFrame::OnPageChanged)
END_EVENT_TABLE()

void MyFrame::OnPageChanged(wxWizardEvent& event) {
	wxWizard * wizard = reinterpret_cast(FindWindowById(wxID_WIZARD));
	WIZARD_BTN_TEXT(wizard, wxID_FORWARD, wizard->HasNextPage(wizard->GetCurrentPage()) ? wxT("下一页") : wxT("完成"));
	WIZARD_BTN_TEXT(wizard, wxID_CANCEL, wxT("取消"));
	WIZARD_BTN_TEXT(wizard, wxID_BACKWARD, wxT("上一页"));
}

二、创建web控件wxWebView

注:如果页面中的异步js调用特别多,那么将会卡GUI界面,这是一个很不好的地方,也说明封装的不成熟

1、创建一个百度链接的web控件

	// 在面板m_panel4上创建一个web控件
	wxWebView * webView = wxWebView::New(m_panel4, wxID_ANY, wxT("https://www.baidu.com"));
	// 加入到垂直布局中
	wxBoxSizer * sizer = new wxBoxSizer(wxVERTICAL);
	sizer->Add(webView,1,wxALL|wxEXPAND,0);
	m_panel4->SetSizer(sizer);
	m_panel4->Layout();
2、更改url

	// 变更url
	webView->LoadURL(wxT("http://www.sina.com.cn"));
3、控件比较难用,尽量不要频繁跳转,容易出各种问题,最好只用来展示某个页面而已。
















你可能感兴趣的:(wxWidgets)