当前位置: 首页 > 编程日记 > 正文

wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验

wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载
1 前言
2 下载、安装wxWidgets
3 wxWidgets应用程序初体验
4 wxWidgets学习资料及利用方法指导
5 用wxSmith进行可视化设计
附:学习材料清单


3 wxWidgets应用程序初体验

本文中全部的体验,在Code::Blocks中进行。

为了在Code::Blocks中编译执行C++写的wxWidgets程序,须要再做些设置。

首先,须要在环境变量里增加一个wxWidgets根文件夹环境变量。设置方法相似于2.3中设置PATH变量的方法。在Win7中,右击桌面上的“计算机”图标,选菜单中的“属性”,在“系统属性”对话框中,完毕例如以下图从15的一系列操作。新增的变量命名为wxwin,值为X:\wxWidgets-3.0.0。

接下来的设置要在Code::Blocks中进行。

打开Code::Blocks,选择菜单Settings->Global Variables…,在设置default下新建立一个wx变量,在Build-in fields:下,base中填入“${wxwin}”(wxwin是刚才设置好的一个变量),include中填入“${wxwin}\include”lib中填入“${wxwin}\lib”,这些都是开发中须要用到的“环境”中的一部分。


3.1 由“空项目”建立和执行GUI应用程序

以下将“白手起家”,由建立“空项目”開始,做一个简单的应用。程序改编自在线教程《wxWidgets tutorial》(http://zetcode.com/gui/wxwidgets/)的“First programs in wxWidgets”部分的第一个程序。这个教程,将作为建议学习方案中的主教程之中的一个。


3.1.1 建立项目

建立项目的过程是:

1通过菜单“File”->“New”->“Project…”,选择Empty project建一个空项目

2)点击“go”button后,有一个欢迎界面,点击“next”,出现下图,填入项目名。我建立的项目名称为wxTest

3)点击“next”后,要求选择编译器及生成的目标文件类型,照下图选择

4)点击“Finish”后,将生成一个空项目,如图

5)点击菜单File->New->File...为项目新建一个源程序文件。在连续出现的几个对话框中,选择要增加的文件类型是“C/C++ source”(即源文件),再一个对话框中选择语言是“C++”。接着,在下图所看到的的对话框中,给出带完整路径的源文件名称(本例中用main.cpp),注意将Debug复选框选中。

6)点击“Finish”后,将以下的源程序输入(或粘贴)到文件main.cpp中。

#include <wx/wx.h>
class Simple : public wxFrame
{
public:Simple(const wxString& title);
};Simple::Simple(const wxString& title): wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150))
{Centre();
}class MyApp : public wxApp
{public:virtual bool OnInit();
};IMPLEMENT_APP(MyApp)bool MyApp::OnInit()
{Simple *simple = new Simple(wxT("Simple"));simple->Show(true);return true;
}

增加了源码之后的项目例如以下图所看到的:

能够临时不考虑程序中的语句是什么意思。能完毕执行程序的完整过程,是我们当前的任务。能执行程序了,后面再看“门道”。

以下将对这个项目进行编译,进而看到执行结果。


3.1.2 编译和执行项目

选择菜单“Build”中的“Build”选项(或者工具栏中的对应button)对项目进行编译、连接。程序第一行即出现错误。错误提示是:

fatal error: wx/wx.h: No such file or directory

也就是说,找不到要包括的头文件wx\wx.h

这须要设置“搜索路径”解决。选菜单Project->Build options...,在选项卡Search directories中,设置Compiler。通过“Add”增加文件夹X:\wxWidgets-3.0.0\lib\gcc_dll\mswudX:\wxWidgets-3.0.0\include,结果例如以下图所看到的

接着Build,将不再有语法错误。

出现的一大堆错误提示,来自于连接环节,问题是找不到库文件。

选菜单Project->Build options...,在选项卡Linker settings中,须要增加要连接的“目标文件”。如图所看到的,通过Addbutton增加X:\wxWidgets-3.0.0\lib\gcc_dll文件夹中的全部.a文件(实际上,选择当中几个须要的就能够了。由于不知道到底须要哪几个,全选是最省事的办法):

然后再编译,0 errors, 0 warnings成功!

可是执行程序时,会出现错误,例如以下图:

按提示来,在X:\wxWidgets-3.0.0\lib\gcc_dll中找到wxmsw30ud_gcc_custom.dll文件,将其复制到项目所在文件夹,再执行,就看到了期盼的窗体,如图所看到的。

出现上面的执行错误,原因是我在Linker settings增加的是lib\gcc_dll文件夹中的.a文件,这些属于动态链接库(这个术语自己百度去吧)。这样的方式的优点在于编译速度快,目标代码小,可是在编译好的程序执行时,必须要能找到须要的.dll文件。最简单的办法,就是拷贝.dll文件。

这个程序非常短,结果也仅仅是一个空空的窗体,可是作为掌握编译、执行窗体程序的案例,却也是足够的了。

以上的设置和文件复制,“有经验”之后能够提前完毕。上面的描写叙述方法,是考虑到希望读者对各个环节的问题,能多些感觉。


3.2 利用Code::Blocks的向导建立应用

还有一种在Code::Blocks中建立wxWidgets Project的方法,是通过“向导”开发应用。这样的方法用得不是非常多,能够作为了解。

本节以下的材料,非作者原创,整理自http://www.cnzui.com/archives/962

利用向导开发的详细步骤是:

1通过菜单“File”->“New”->“Project…”,选择最后面的wxWidgets project

2点击“Go”进入工程配置向导,首先会出来一个欢迎窗体,直接next后,选择安装好wxWidgets版本号

注:Code::Blocks 13.12中,已经有了对wxWidgets 3.0.x的支持。须要选对版本号,否则能够继续生成应用程序,可是不能正确连接和执行。

3“Next”,然后输入项目名“wxtest”,选择保存项目的文件夹。

4继续“Next”,输入作者和及一些版权说明信息。

5继续“Next”,选择GUI设计工具和程序类型,用wxSmithDialog based

6“Next”,接下来的就是wxWidgets环境的一些设置了,这里我们输入刚才设置的wxWidgets根文件夹,直接填入“$(#wx)”就能够了。

7“Next”,这里我们看到默认就是选择了MinGW编译器了,以下的我们仅仅做Debug版本号,所以仅仅选上“Create “Debug” configuration”

9继续“Next”,接下来要选择怎么使用wxWidgets库,这里依据你编译的wxWidgets库是什么样的来。

10“Next”,由于选择了“Configure Advanced Options”,所以要对使用wxWidgets库做很多其它的设置,这里我们选上我们使用lib方式调用(要求编译wxWidgets时用SHARED=0參数,生成了静态库文件)

11“Next”进到最后一步,我们选择须要用到的库,不知道的话全部选上。

12点击“Finish”,工程随即建立成功。

这时能够查看项目中自己主动生成的文件,当中有.cpp的源文件,也有.h的头文件。再细读,和3.1中输入的程序长得差点儿相同。

事实上,向导的作用,就是通过一系列的选择,由向导程序自己主动生成应用程序。

如上步骤创建的应用程序的执行的结果是:

在编译和执行时,都有可能出现一些错误。这一般不是程序本身的问题,而是Code::Blocks的编译环境和执行的支持文件不全而造成的。

请參阅3.1.2小节,可能会帮助你排除问题,让程序正确执行。




================= 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类文件夹(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====



相关文章:

C++中extern的使用

在C中&#xff0c;extern主要有两个作用&#xff1a;(1)、extern声明一个变量或函数&#xff1b;(2)、extern与”C”一起连用&#xff0c;用于链接指定。关于extern “C”的使用可以参考&#xff1a; http://blog.csdn.net/fengbingchun/article/details/78634831 &#xff0c;…

Python识别文字,实现看图说话 | CSDN博文精选

作者 | 张小腿来源 | CSDN博客现在写文件很多网站都不让复制了&#xff0c;所以每次都是截图然后发到QQ上然后用手机QQ的文字识别再发回电脑。感觉有点小麻烦了&#xff0c;所以想自己写一个小软件方便方便自己&#xff0c;就有了这篇了&#xff1a;首先语言是Python&#xff0…

Oracle Hints具体解释

在向大家具体介绍Oracle Hints之前&#xff0c;首先让大家了解下Oracle Hints是什么&#xff0c;然后全面介绍Oracle Hints&#xff0c;希望对大家实用。基于代价的优化器是非常聪明的&#xff0c;在绝大多数情况下它会选择正确的优化器&#xff0c;减轻了DBA的负担。但有时它也…

主成分分析(PCA)简介

主成分分析(Principal Components Analysis, PCA)是一个简单的机器学习算法&#xff0c;可以通过基础的线性代数知识推导。假设在Rn空间中我们有m个点{x(1),…,x(m)}&#xff0c;我们希望对这些点进行有损压缩。有损压缩表示我们使用更少的内存&#xff0c;但损失一些精度去存储…

01-HTML基础与进阶-day6-录像281

04css选择器.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style type"text/css">/* p div 标签选择器*/p {color: red; /* k:v color表示样式属性 颜…

百度CTO王海峰:深度学习如何大规模产业化?

编者按&#xff1a;10月17日-19日&#xff0c;2019年中国计算机大会&#xff08;CNCC2019&#xff09;在苏州举办。百度首席技术官王海峰在会上发表题为《深度学习平台支撑产业智能化》的演讲&#xff0c;分享了百度关于深度学习技术推动人工智能发展及产业化应用的思考。以下为…

Kali Linux***测试

Kali Linux***测试实战 第一章http://drops.wooyun.org/tips/826 1.1 Kali Linux简介如果您之前使用过或者了解BackTrack系列Linux的话&#xff0c;那么我只需要简单的说&#xff0c;Kali是BackTrack的升级换代产品&#xff0c;从Kali开始&#xff0c;BackTrack将成为历史。如果…

一站式解决:隐马尔可夫模型(HMM)全过程推导及实现

作者 | 永远在你身后转载自知乎用户永远在你身后【导读】隐马尔可夫模型&#xff08;Hidden Markov Model&#xff0c;HMM&#xff09;是关于时许的概率模型&#xff0c;是一个生成模型&#xff0c;描述由一个隐藏的马尔科夫链随机生成不可观测的状态序列&#xff0c;每个状态生…

CUDA Samples: Image Process: BGR to BGR565

图像像素格式BGR565是每一个像素占2个字节&#xff0c;其中Blue占5位&#xff0c;Green占6位&#xff0c;Red占5位。在OpenCV中&#xff0c;BGR到BGR565的每一个像素的计算公式是&#xff1a;unsigned short dst (unsigned short)((B >> 3) | ((G & ~3) << 3)…

NoSQL数据库探讨 - 为什么要用非关系数据库?

源地址&#xff1a;http://robbin.javaeye.com/blog/524977 随着互联网web2.0网站的兴起&#xff0c;非关系型的数据库现在成了一个极其热门的新领域&#xff0c;非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站&#xff0c;特别是超大规模和高并发的SNS类…

手机内存RAM、ROM简介

手机内存包含两个&#xff1a;一个是运行内存(RAM)&#xff0c;一个是机身内存(ROM)。两者的功能有所不同&#xff0c;运行内存是对手机操作系统和其它程序运行过程中&#xff0c;产生的临时数据进行存储的媒介。如果手机运行的程序比较多&#xff0c;占用运行内存空间较大&…

一个月入门Python爬虫,轻松爬取大规模数据

如果你仔细观察&#xff0c;就不难发现&#xff0c;懂爬虫、学习爬虫的人越来越多&#xff0c;一方面&#xff0c;互联网可以获取的数据越来越多&#xff0c;另一方面&#xff0c;像 Python这样一个月入门Python爬虫&#xff0c;轻松爬的编程语言提供越来越多的优秀工具&#x…

软件包管理 之 软件在线升级更新yum 图形工具介绍

作者&#xff1a;北南南北来自&#xff1a;LinuxSir.Org提要&#xff1a;yum 是Fedora/Redhat 软件包管理工具&#xff0c;包括文本命令行模式和图形模式&#xff1b;图形模式的yum也是基于文本模式的&#xff1b;目前yum图形前端程序主要有 yumex和kyum &#xff1b; 正文一、…

[PHPUnit]自动生成PHPUnit测试骨架脚本-提供您的开发效率【2015升级版】

2019独角兽企业重金招聘Python工程师标准>>> 场景 在编写PHPUnit单元测试代码时&#xff0c;其实很多都是对各个类的各个外部调用的函数进行测试验证&#xff0c;检测代码覆盖率&#xff0c;验证预期效果。为避免增加开发量&#xff0c;可以使用PHPUnit提供的phpuni…

ORL Faces Database介绍

ORL人脸数据集共包含40个不同人的400张图像&#xff0c;是在1992年4月至1994年4月期间由英国剑桥的Olivetti研究实验室创建。此数据集下包含40个目录&#xff0c;每个目录下有10张图像&#xff0c;每个目录表示一个不同的人。所有的图像是以PGM格式存储&#xff0c;灰度图&…

张俊林:BERT和Transformer到底学到了什么 | AI ProCon 2019

演讲嘉宾 | 张俊林&#xff08;新浪微博机器学习团队AI Lab负责人&#xff09;编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】BERT提出的这一年&#xff0c;也是NLP领域迅速发展的一年。学界不断提出新的预训练模型&#xff0c;刷新各…

Eclipse创建web工程时,报错Dynamic Web Module 3.0 requires Java 1.6 or newer.

报错&#xff1a; 解决方案&#xff1a; 1.打开eclipse工具栏window->preferences 2.打开java->compiler 3.选择compiler compliance level在1.6以上版本&#xff08;此处选择1.8&#xff09; 4.点击apply and close保存修改&#xff0c;即可 转载于:https://www.cnblogs…

Maven学习总结(八)——使用Maven构建多模块项目

2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(八)——使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护&#xff0c;我们一般会进行分层开发&#xff0c;最常见的就是分为domain&#xff08;域模型层&#xff09;、dao&#xff0…

哈工大、清华、CSDN、嵌入式视觉联盟合办的 AIoT 盛会,你怎么舍得错过?!

2019 嵌入式智能国际大会即将来袭&#xff01;随着物联网和人工智能技术的飞速发展与相互渗透&#xff0c;万物智联的新赛道已经开始显现。据中商产业研究院《2016—2021年中国物联网产业市场研究报告》显示&#xff0c;预计到2020年&#xff0c;中国物联网的整体规模将达2.2万…

OpenCV3.3中主成分分析(Principal Components Analysis, PCA)接口简介及使用

OpenCV3.3中给出了主成分分析(Principal Components Analysis, PCA)的实现&#xff0c;即cv::PCA类&#xff0c;类的声明在include/opencv2/core.hpp文件中&#xff0c;实现在modules/core/src/pca.cpp文件中,其中&#xff1a;(1)、cv::PCA::PCA&#xff1a;构造函数&#xff1…

Spring MVC配置

为什么80%的码农都做不了架构师&#xff1f;>>> 一、传统方式配置Spring MVC &#xff08;1&#xff09;导入jar包 需要导入如下的jar包 junit-3.8.1.jar spring-core-3.0.5.RELEASE.jar commons-logging-1.1.1.jar spring-context-3.0.5.REL…

主成分分析(PCA)Python代码实现

主成分分析(Principal Components Analysis, PCA)简介可以参考&#xff1a; http://blog.csdn.net/fengbingchun/article/details/78977202 这里是参照 http://sebastianraschka.com/Articles/2014_pca_step_by_step.html 文章中的code整理的Python代码&#xff0c;实现过程为…

AI发展这一年:不断衍生的技术丑闻与抵制声潮

作者 | AI Now学院译者 | Raku编辑 | Jane出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】10月2日&#xff0c;纽约大学AI Now学院在纽约大学斯克博剧院&#xff08;Skirball Theatre&#xff09;组织召开了第四届年度AI Now研讨会。研讨会邀请了业内组织者…

Distributed Configuration Management Platform(分布式配置管理平台)

2019独角兽企业重金招聘Python工程师标准>>> 专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务。 主要目标&#xff1a; 部署极其简单&#xff1a;同一个上线包&#xff0c;无须改动配置&#xff0c;即可在 多个环境中(RD/QA/PRODUCTION…

如何利用zendstudio新建 或导入php项目

为什么80%的码农都做不了架构师&#xff1f;>>> 一、利用ZendStudio创建 PHP Project 1. 打开ZendStudio, 选择&#xff1a;File &agrave; New &agrave; PHP Project, 如下图所示: 于是弹出如下界面&#xff1a; 在”Project name”后输入工程名(比如我这里…

一文读懂GoogLeNet神经网络 | CSDN博文精选

作者 | .NY&XX来源 | CSDN博客本文介绍的是著名的网络结构GoogLeNet&#xff0c;目的是试图领会其中结构设计思想。GoogLeNet特点优化网络质量的生物学原理GoogLeNet网络结构的动机GoogLeNet架构细节Inception模块和普通卷积结构的差异辅助分类器GoogLeNet网络架构GoogLeNe…

C++中的函数签名

C中的函数签名(function signature)&#xff1a;包含了一个函数的信息&#xff0c;包括函数名、参数类型、参数个数、顺序以及它所在的类和命名空间。普通函数签名并不包含函数返回值部分&#xff0c;如果两个函数仅仅只有函数返回值不同&#xff0c;那么系统是无法区分这两个函…

MyEclipse断点调试

2019独角兽企业重金招聘Python工程师标准>>> 1、在编辑的程序的左边&#xff0c;你会看到一条浅浅的灰色编带&#xff0c;在这里设置断点。 2、设置断点的方法有很多 方法&#xff1a;1&#xff09;、双击 &#xff1b; 2&#xff09;、右键&#xff0c;选择“Toggl…

C primer plus 练习题 第三章

5. 1 #include <stdio.h>2 3 int main()4 {5 float you_sec;6 printf("请输入你的年龄:");7 scanf("%f", &you_sec);8 printf("年龄合计:%e 秒!\n", you_sec * 3.156e7);9 getchar(); 10 return 0; 11 }

Echache整合Spring缓存实例讲解

2019独角兽企业重金招聘Python工程师标准>>> 摘要&#xff1a;本文主要介绍了EhCache&#xff0c;并通过整合Spring给出了一个使用实例。 一、EhCache 介绍 EhCache 是一个纯Java的进程内缓存框架&#xff0c;具有快速、精干等特点&#xff0c;是Hibernate中默认的C…