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

来源:互联网 发布:头戴游戏耳机推荐 知乎 编辑:程序博客网 时间:2024/05/29 12:29

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)// 告诉主应用程序是哪个类wxWidgetsIMPLEMENT_APP(MyApp)// 初始化程序bool MyApp::OnInit(){// 创建主窗口MyFrame *frame = new MyFrame(wxT("简单wxWidget应用程序"));// 显示主窗口frame->Show(true);// 开始事件循环return true;}// 类的事件表MyFrameBEGIN_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进行跨平台程序开发(中文版) 第二章

原创粉丝点击