当前位置: 首页 > news >正文

C++GUI之wxWidgets(6)-一步步做zip精灵(1)

目录

  • 一步步做zip精灵
    • 头文件
    • 应用类声明
    • 框架类声明
    • 创建MyApp实例
    • OnInit()
    • 事件表
    • OnAbout

一步步做zip精灵

头文件

#include <wx/wx.h>

应用类声明

// application class
class ZipApp : public wxApp
{
public:
	// function called at the application initialization
	virtual bool OnInit();


};

1、每个wxWidgets应用程序都定义一个从wxApp派生的应用程序类。它只有一个实例,该实例表示正在运行的应用,至少派生类应该定义一个OnInit函数,将在wxWidgets准备好开始运行代码时调用
2、OnInit这个虚函数返回true ,将启动事件 主循环。
3、OnInit的实现通常至少创建一个窗口,解释任何命令行参数,为应用程序设置数据,并执行
应用程序所需的任何其他初始化任务。

框架类声明

//frame class
class ZipFrame:public wxFrame{
public:
    ZipFrame(const wxString &title);
    void OnQuit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);    
private:
    string ver{"0.1"};
    DECLARE_EVENT_TABLE();
}

1、框架是包含其他窗口的顶级窗口,通常具有标题栏和菜单栏。框架类声明放在应用类声明之后。
2、框架类有一个构造函数,两个用于链接菜单命令的事件处理程序以及一个宏来告诉wxWidgets这个类处理事件。

创建MyApp实例

1、(1)创建MyApp实例的代码在哪里?wxWidgets执行此操作,需要告诉wxWidgets要创建什么类型的对象。所以需要在实现文件中添加宏:

IMPLEMENT_APP(ZipApp);

(2)如果不指定类,wxWidgets将不知道如何创建新的应用程序对象。此宏还插入代码,检查应用程序和库是否使用相同的构建配置编译,允许wxWidgets可以报告意外的不匹配,这些不匹配可能会导致难以调试的运行时失败。

2、当wxWidgets创建ZipApp对象时,它将结果分配给全局变量wxTheApp。你可以在你的应用程序中使用这个,但它不是很方便,如果您不必将wxApp指针转换为ZipApp。通过在应用程序类声明后插入此宏:

DECLARE_APP(ZipApp);

然后就可以调用函数wxGetApp,该函数返回对MyApp的引用对象 。
即使不使用DECLARE_APP,也可以使用变量wxTheApp调用wxApp函数。

OnInit()

bool ZipApp::OnInit()
{

ZipFrame *frame = new ZipFrame(wxT("zip精灵"));
frame->Show(true);
return true;
}

1、创建一个新类ZipFrame的实例,显示它,并返回true以启动事件循环。与子窗口不同,顶级窗口(如框架和对话框)需要在创建后明确显示。

2、frame标题被传递给包装在wxT()宏中的构造函数。它将字符串和字符文本转换为适当的类型,以允许应用程序以Unicode模式编译。

事件表

BEGIN_EVENT_TABLE(ZipFrame, wxFrame)
EVT_MENU(wxID_ABOUT, ZipFrame::OnAbout)
EVT_MENU(wxID_EXIT, ZipFrame::OnQuit)
END_EVENT_TABLE()

1、放置在类的实现文件中的事件表告诉wxWidgets如何来自用户或其他源的事件被路由到成员函数。
2、这种事件表是一种静态的事件路由方式,不能在运行时更改。
3、用鼠标单击菜单项标识符wxID_EXIT和wxID_ABOUT被路由到函数MyFrame::OnQuit和MyFrame::OnAbout 。

OnAbout

void ZipFrame::OnAbout(wxCommandEvent& event)
{
wxString msg;
msg.Printf(wxT(“欢迎使用zip精灵%s”), ver);
wxMessageBox(msg, wxT("关于zip精灵"),wxOK | wxICON_INFORMATION, this);
}

MyFrame::OnAbout在用户单击“关于”时显示一个消息框菜单项。wxMessageBox接收消息、标题、样式组合和父窗口 。

相关文章:

  • [vue element-ui]JAVA POST请求
  • 【C语言 全局 整形变量 布尔变量 数组变量 指针变量 结构体位域变量 枚举变量被其他.C文件相互访问】
  • MyBatis的增删改查操作
  • TypeScript基础类型
  • 汇聚数据库创新力量,加速企业数字化转型
  • python实战案例——采集二手车数据并分析其价值
  • Java EE 程序修改题【太原理工大学】
  • Promise:工作流程、常见API、使用方法、手撕Promise、async/await
  • Vue3 中选项式下的侦听器
  • 有向图的拓扑序列
  • 防御 CSS 黑客——介绍“安全的 CSS hacks”
  • 通信原理与MATLAB(九):DPSK的调制解调
  • Docker安装配置运行Redis
  • 2022 年上海市大学生程序设计竞赛 M. My University Is Better Than Yours
  • 数据结构(陈越、何钦铭)学习笔记
  • extjs4学习之配置
  • Facebook AccountKit 接入的坑点
  • JAVA_NIO系列——Channel和Buffer详解
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Java到底能干嘛?
  • java取消线程实例
  • js递归,无限分级树形折叠菜单
  • SQLServer插入数据
  • 产品三维模型在线预览
  • 分布式熔断降级平台aegis
  • 让你的分享飞起来——极光推出社会化分享组件
  • 深入浅出webpack学习(1)--核心概念
  • 移动端唤起键盘时取消position:fixed定位
  • 再谈express与koa的对比
  • ​水经微图Web1.5.0版即将上线
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #FPGA(基础知识)
  • (11)iptables-仅开放指定ip访问指定端口
  • (2022 CVPR) Unbiased Teacher v2
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (8)STL算法之替换
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (LeetCode 49)Anagrams
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (PADS学习)第二章:原理图绘制 第一部分
  • (二)PySpark3:SparkSQL编程
  • (二)测试工具
  • (二)斐波那契Fabonacci函数
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 4.0中的泛型协变和反变
  • .Net Core 笔试1
  • .net dataexcel 脚本公式 函数源码