3 wxWidgets应用程序初体验

  本文中所有的体验,在Code::Blocks中进行。

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

  首先,需要在环境变量里添加一个wxWidgets根目录环境变量。设置方法类似于2.3中设置PATH变量的方法。在Win7中,右击桌面上的“计算机”图标,选菜单中的“属性”,在“系统属性”对话框中,完成如下图从1到5的一系列操作。新增的变量命名为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”按钮后,有一个欢迎界面,点击“next”,出现下图,填入项目名。我建立的项目名称为wxTest。

  

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

  

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

  

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

  

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

  1. #include <wx/wx.h>
  2. class Simple : public wxFrame
  3. {
  4. public:
  5. Simple(const wxString& title);
  6. };
  7. Simple::Simple(const wxString& title)
  8. : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150))
  9. {
  10. Centre();
  11. }
  12. class MyApp : public wxApp
  13. {
  14. public:
  15. virtual bool OnInit();
  16. };
  17. IMPLEMENT_APP(MyApp)
  18. bool MyApp::OnInit()
  19. {
  20. Simple *simple = new Simple(wxT("Simple"));
  21. simple->Show(true);
  22. return true;
  23. }

  加入了源代码之后的项目如下图所示:

  

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

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

3.1.2 编译和运行项目

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

  1. 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\mswud和X:\wxWidgets-3.0.0\include,结果如下图所示:

  

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

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

  选菜单Project->Build options...,在选项卡Linker settings中,需要加入要连接的“目标文件”。如图所示,通过Add按钮加入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设计工具和程序类型,用wxSmith和Dialog based。

  

  (6)按“Next”,接下来的就是wxWidgets环境的一些设置了,这里我们输入刚才设置的wxWidgets根目录,直接填入“$(#wx)”就可以了。

  

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

  

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

  

后注:在wxWidgets Library Setting部分,三个勾都打上。这样,只要在编译时SHARED=1,满足了Use wxWidgets DLL,使用动态链接接库的要求;用MONOLITHIC=1,满足了wxWidgets is built as a monolithic library,构建单一库;而UNICODE=1,满足支持宽字符串Enable unicode。也就是说,当初编译wxWidgets时用:mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug和mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release,就可以满足生支供调试和发布的代码两项要求。

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

  

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

  

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

  这时可以查看项目中自动生成的文件,其中有.cpp的源文件,也有.h的头文件。再细读,和3.1中输入的程序长得差不多。

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

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

  

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

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

http://blog.csdn.net/sxhelijian/article/details/26164181

wxWidgets初学者导引(3)——wxWidgets应用程序初体验的更多相关文章

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

    wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wx ...

  2. wxWidgets初学者导引(2)——下载、安装wxWidgets

    wxWidgets初学者导引全目录   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxSmith ...

  3. 微信小程序初体验,入门练手项目--通讯录,部署上线(二)

    接上一篇<微信小程序初体验,入门练手项目--通讯录,后台是阿里云服务器>:https://www.cnblogs.com/chengxs/p/9898670.html 开发微信小程序最尴尬 ...

  4. 【尝新】微信小程序初体验

    文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1474644089434 根据文档地址中下载微信开发工具后,按照文档指引可以创建一个快速体验的小d ...

  5. 微信小程序初体验(上)

    版权声明:本文由练小习原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/204 来源:腾云阁 https://www.qclo ...

  6. Win手机安卓程序初体验

    老大说快看博客园,Windows手机可以装安卓程序了. 啊,真的么?可以在我的撸妹1520上愉快的玩COC了么?我还可以愉快的看小说,不对,是听小说,哈哈,安卓君的三千万程序兵,等着老夫来一一临幸你们 ...

  7. 微信小程序初体验--封装http请求

    最近看了一下微信小程序,大致翻了一下,发现跟angular很相似的,但是比angular简单的很多具体可参考官方文档 https://mp.weixin.qq.com/debug/wxadoc/dev ...

  8. wx小程序初体验

    小程序最近太火,不过相比较刚发布时,已经有点热度散去的感觉,不过这不影响我们对小程序的热情,开发之前建议通读下官网文档,附链接:https://mp.weixin.qq.com/debug/wxado ...

  9. 微信小程序初体验,入门练手项目--通讯录,后台是阿里云服务器(一)

    内容: 一.前言 二.相关概念 三.开始工作 四.启动项目起来 五.项目结构 六.设计理念 七.路由 八.部署线上后端服务 同步交流学习社区: https://www.mwcxs.top/page/4 ...

随机推荐

  1. Linux_Shell初级编程入门

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  2. 把git仓库从码云迁到github,及git常用命令

    前言 刚开始建仓库的时候,因为网络的原因选择了国内的码云.后来又想换成github,毕竟平时github使用率比较高. 替换远程仓库地址方式如下: git remote set-url origin ...

  3. [CSS] Use CSS Counters to Create Pure CSS Dynamic Lists

    CSS counters let you create dynamic lists without JavaScript. In this lesson, we will create a multi ...

  4. [Javascript] Validate Data with the Every() Method

    The every method returns true or false based on whether or not every item in the array passes the co ...

  5. 初步安装git使用命令配置电脑中的git关联的账户

    原文地址 https://www.jianshu.com/p/39684a3ad4fa 出现问题 当我们初步使用git的时候,会报一些出乎预料的错误,比如:报错:fatal: unable to au ...

  6. HTML5开发移动web应用——SAP UI5篇(9)

    之前我们对于app的构建都是基于显示的.如今我们来格式化一下,引入很多其它的SAP UI5组件概念.这使得APP的一个界面更有层次性.更像是一个手机应用的界面,而且更好地使用SAP UI5中提供的功能 ...

  7. c# 读/写文件(各种格式)

    最简单的: --------写 //content是要写入文本的字符串 //(@txtPath + @"\" + rid + ".txt");要被写入的TXT ...

  8. 配置java 环境变量(jdk)

    java环境变量需要配置3个: JAVA_HOME:D:\Program Files (x86)\Java\jdk1.8 CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAV ...

  9. MIPS Instruction Set

    https://www.mips.com/develop/training-courses/mips-basic-training-course/ The MIPS64 Instruction Set ...

  10. Home界面的启动

    继上篇文章Launcher进程的启动,我们继续分析Home界面的启动. public final class ActivityThread { ...... public static final v ...