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进行跨平台程序开发(中文版) 第二章
相关文章推荐
- 整理一下当年的学习笔记之:初步学习freemarker ,先做一个简单的HelloWord程序!
- 基于node的websocket学习笔记二:一个简单的聊天室程序与优化方案
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(1)-实现一个简单的bootloader
- VS2010 C++ MFC框架学习笔记1 - 创建一个简单的加法计算器(1)
- OpenCV 2 学习笔记(3): 一个简单的opencv程序:在Console上显示图像
- Servlet学习笔记_03_使用servlet编写一个简单的helloworld程序
- Directshow学习笔记五-----一个简单的视频播放程序(个人学习总结,仅供参考)
- VS2010 C++ MFC框架学习笔记2 - 创建一个简单的加法计算器(2)
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(1)-实现一个简单的bootloader
- 【Rebol 学习笔记】第一篇:编写一个简单的 CGI 程序
- ACE学习笔记 ----- 一个简单的网页链接提取程序
- UNIX环境编程学习笔记-----编程实例------一个简单的服务器端和客户端程序
- 学习 UNIX网络编程卷1:套接字 笔记1-实现一个简单的回射客户服务器程序
- 微信小程序,学习笔记(二)样式(WXSS)及一个简单的小测试用例
- c++学习笔记--一个简单的 try-catch-throw
- ROS学习笔记十:用C++编写一个简单的服务和客户端
- python学习笔记:"爬虫+有道词典"实现一个简单的英译汉程序
- 【C++学习笔记】简单的多线程程序(摘自孙鑫C++教学视频)
- Go学习笔记:写一个简单的web程序
- C++学习笔记——VS2015程序的简单调试