您的位置:首页 > 编程语言 > C语言/C++

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

2012-10-02 15:44 831 查看

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. 本示例基本要素

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

3. 一般执行过程

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

参考:
        使用wxWidgets进行跨平台程序开发(中文版) 第二章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐