C++: wxWidgets (3) 一个简单的wxWidgets程序(学习笔记)

1. 示例文件

在CodeLite中创建一个WorkSpace,再在WorkSpace中创建一个Project,加入以下两个文件:
文件:SimplewxWidgets.cpp
/* 名称:	SimplewxWidgets.cpp
 * 目的:	一个简单的wxWidget示例
*/

#include <wx/wx.h>

// 定义应用程序类
class MyApp: public wxApp
{
public:
	// 这个函数将会在程序启动时被调用
	virtual bool OnInit();
};

// 定义主窗口类
class MyFrame: public wxFrame
{
public:
	// 主窗口类的构造函数
	MyFrame(const wxString& title);
	
	// 事件处理函数
	void OnQuit(wxCommandEvent& e);
	void OnAbout(wxCommandEvent& e);
	
private:
	// 声明事件表
	DECLARE_EVENT_TABLE()
};

// 有了这一行就可以使用 MyApp& wxGetApp()了
DECLARE_APP(MyApp)

// 告诉主应用程序是哪个类wxWidgets
IMPLEMENT_APP(MyApp)

// 初始化程序
bool MyApp::OnInit()
{
	// 创建主窗口
	MyFrame *frame = new MyFrame(wxT("简单wxWidget应用程序"));
	
	// 显示主窗口
	frame->Show(true);
	
	// 开始事件循环
	return true;
}

// 类的事件表MyFrame
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
	EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
	EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
END_EVENT_TABLE()

void MyFrame::OnAbout(wxCommandEvent& e)
{
	wxString msg;
	msg.Printf(wxT("你好!欢迎来到%s"), wxVERSION_STRING);
	wxMessageBox(msg, wxT("关于"), wxOK | wxICON_INFORMATION, this);
}

void MyFrame::OnQuit(wxCommandEvent& e)
{
	// 释放主窗口
	Close();
}

#include "mondrian.xpm"

MyFrame::MyFrame(const wxString& title)
		:wxFrame(NULL, wxID_ANY, title)
{
	// 设置窗口图标
	SetIcon(wxIcon(mondrian_xpm));
	
	// 创建文件菜单项
	wxMenu *fileMenu = new wxMenu;
	fileMenu->Append(wxID_EXIT, wxT("退出(&X)\tAlt-X"), wxT("退出本应用程序"));
	
	// 创建帮助菜单项
	wxMenu *helpMenu = new wxMenu;
	helpMenu->Append(wxID_ABOUT, wxT("关于(&A)...\tF1"), wxT("显示关于对话框"));
	
	// 将菜单项添加到菜单条中
	wxMenuBar *menuBar = new wxMenuBar();
	menuBar->Append(fileMenu, wxT("文件(&F)"));
	menuBar->Append(helpMenu, wxT("帮助(&H)"));
	
	//然后将菜单条设置在主窗口上
	SetMenuBar(menuBar);
	
	// 创建一个状态条来让一切更有趣些
	CreateStatusBar(2);
	SetStatusText(wxT("欢迎使用wxWidgets!"), 1);
}
文件: mondrian.xpm
/* XPM */
static char *mondrian_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 32 6 1",
"  c Black",
". c Blue",
"X c #00bf00",
"o c Red",
"O c Yellow",
"+ c Gray100",
/* pixels */
"                                ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
"                                ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++      ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++                    ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
"                                "
};

2. 本示例基本要素

  1. 一个应用程序类。在这里是从wxApp类派生的子类MyApp,该子类定义了一个OnInit函数,当wxWidgets准备好运行你写的代码的时候,它将会调用这个函数。
  2. 一个窗口类。用来响应UI操作。
  3. 事件处理表。所谓事件表,是一组位于类的实现文件(.cpp文件)中的宏,用来告诉wxWidgets来自用户或者其它地方的事件应该怎样和类的成员函数对应起来。

3. 一般执行过程

  1. 依照系统平台的不同,不同的main函数或者winmain函数或者其它类似的函数被调用(这个函数是由wxWidgets内部提供的,而不是由应用程序提供的)。wxWidgets 初始化它自己的数据结构并且创建一个MyApp的实例.
  2. wxWidgets调用MyApp::OnInit函数, 这个函数会创建一个MyFrame的实例.
  3. MyFrame的构造函数通过它的基类wxFrame的构造函数创建一个窗口,然后给这个窗口增加图标,菜单栏和状态栏.
  4. MyApp::OnInit函数显示主窗口并且返回真.
  5. wxWidgets开始事件循环,等待事件发生并且将事件分发给相应的处理过程.

参考:
        使用wxWidgets进行跨平台程序开发(中文版) 第二章

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值