wxWidgets编程起步

开始学习wxWidgets,上一篇写了“安装wxWidgets遭遇的两大关卡”(简称“前文”)。

  先推荐一下这两天找到的学习材料。
  博客中有一个系列教程,貌似作者没有写完,见《跟我学wxWidgets开发》系列教程
  要看书,就《使用wxWidgets进行跨平台程序开发》。我给的链接中,包括中书中的源码。这本书,是《Cross Platform GUI Programming With wxWidget》的中译本,译本中没有附录部分,我看了英文版的,可读性还不错。
  通过浏览书,发现了前文中说过的问题。看书、实践交叉着来,学习效率自然高。
  wxWidget自带的文档也是很好的参考资料,满世界找不到参考的时候,不要忘记现成的“权威”一手资料。在线手册在http://docs.wxwidgets.org/3.0/,从http://www.wxwidgets.org/downloads/可以下载文档离线看,有html、chm两种格式。
  还有,下载来的demo和sample,其中都是好案例。如何用,后文中要讲。
  最全的资料,在wxWiki——http://wiki.wxwidgets.org/Main_Page。还有官网的在线教程http://www.wxwidgets.org/docs/tutorials/,再次感受开源的力量。

  前文通过编译wxWidgets2.8.7,搞清楚了基本的“路数”。看了推出几个月的3.0.0版,看给出的改进不少,决定卸载昨天做的工作,再来一遍。
  放弃wxPack还是有些不甘。想着我的大一学生,在他们自己的本本上,如果安装wxPack就能用,那该是更好的事。他们首先要体验的,是用wxWidgets做出程序来,而不是在编译wxWidgets中遇上一堆问题,然后就没有然后了。
  用最新的wxPack,安装了wxWidgets2.8.12,观察库文件,确实该有的都有了。用Code::Blocks12.11中wxWidgets2.8.x向导做出两个测试的程序,却都在运行时发生了内存溢出的问题。分析原因,应该是GCC版本问题。wxPack安装的wxWidgets2.8.12是用GCC4.4.1编译的,而我的CodeBlocks12.11中用GCC4.7.1,溢出不意外。这一点,有网友给出评论,“不用wxpack是对的,wxPack is no longer recommended for use, as it is built with a much older version of GCC.”

  下载、编译wxWidgets3.0.0,已经不是什么问题(见前文),只编译了用于生成Debug目标文件版本库文件。
  但是用Code::Blocks在编出程序时,却出了问题。
  先在Code::Blocks中建立wxWidgets Project,用向导整出个程序来玩,这是刚开始能做的事。但是,Code::Blocks12.11中,最高版本只能建立wxWidgets2.8.x版的应用,编译时,总找不到libwxmsw28ud.a等文件。难怪,这里只有libwxmsw30ud.a。该在Code::Blocks中能够修改设置,不想找了。
  建立,wxWidgets3.0.0中的应用,成了需要做的事情。实际上,要运行书中和网络中找到的案例,不能靠向导。

  为介绍建立过程,我用《使用wxWidgets进行跨平台程序开发》中第2章的案例。过程是这样的(建议至少浏览过第2章后再试,请先去下载书和源码):

  建一个空项目,如图1:

图1

  我建的项目,名称为minimal。将项目上的源文件minimal.cpp拷贝到项目所在文件夹中,在codeBlocks中项目名上点右键,选Add file...将这个文件加入项目。文件mondrian.xpm是图标文件,也一并拷贝过去(不做,后面也需要补上)。另外,在文件minimal.cpp上点右键,选properties...,在对话框中将文件的只读属性去掉。加入源文件后的界面如图2所示:  图2

  如果这时编译,会有一堆错误,首先面对的问题,编译时找不到需要的头文件。

  选菜单setting->Global variables...,保证配置类似图3(根据你安装wxWidgets的目录):

图3

  选菜单Project->Build options...,在选项卡Search directories中,设置Compiler,如图4所示:

图4

  这时再编译,将不再有语法错误,但一大堆问题,来自于连接环节,问题是找不到库文件。

  选菜单Project->Build options...,在选项卡Linker settings中,加入X:\wxWidgets-3.0.0\lib\gcc_dll文件夹中的所有.a文件,如图5所示:

图5

  然后再编译,成功!

  但是运行程序时,会出现错误,如图6:

图6

  按提示来,在X:\wxWidgets-3.0.0\lib\gcc_dll中找到那wxmsw30ud_gcc_custom.dll文件,将其拷贝到项目所在文件夹,看到了期盼的窗口,如图7所示。

图7

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

  先这样做起来,越学越多,知识就这样积累起来了。

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

wxWidgets编程起步的相关文章

javascript编程起步(第三课)_基础知识

javascript编程起步第三课 第三课终于和大家见面了, 大家要感谢 Actions 的辛勤劳动啊, 好好利用论坛给大家提供的资源和教程, 希望大家一起学习提高 :D 大家有什么意见, 建议或者想法, 可以到本版的教程问答区 或 站务管理版的 建议或意见 去发表, 我们会及时给您反馈 :) 下面是今天的学习重点 A.补充上课的变量内容 B.if语句的基本语法 C.window.com()基本用法 A.变量 1.变量的类型规则 javascript是无类型的他的变量可以放任何数据类型的值. 2

J2EE编程起步(一)

j2ee|编程 为了帮助国内J2EE初学者,将J2EE部分文档进行编译,期望能够对广大Java爱好者有所帮助. 本文将通过简单例子,描述如何利用EJB开发.部署和运行一个客户机/服务器应用.例子的客户端作为Java独立应用运行,由 ConverterClient.java类实现.它实现一个简单的实时会话,主要通过客户端应用调用服务器端EJB类 ConverterEJB.java来实现.如果你已经安装了J2EE,则可以在doc/guides/ejb/examples/converter目录中找到这

J2EE编程起步(二)

j2ee|编程 创建J2EE应用 你不能够直接将企业组件(EJB)部署到J2EE服务器,必须将组件加到一个J2EE 应用中然后再部署.在本节,你将创建一个叫做ConverterApp的新J2EE应用并保存为ConverterApp.ear. 1. 在命令行提示符下启动J2EE服务器: j2ee ?verbose (停止服务器命令 j2ee -stop.) 2. 在另一个终端窗口运行部署工具: deploytool (按F1获取部署工具帮助) 3. 创建新的J2EE应用 a. 在部署工具中选择"文

javascript编程起步(第六课)_基础知识

mouseDown事件和mouseUp事件 大家知道,mouseDown事件和mouseUp事件的组合就是click事件,但是如果在链接上按下鼠标,并移到链接之外在放开鼠标,那么就只有mouseD own事件了.这两个事件可以增加图标按钮的图像效果,   至于mouseDown和mouseUp的属性,它们是伴随着Click事件发生的,这和keyPress事件是keyDown事件和keyUp事件组合而成的机制是一样的 ,这3个鼠标事件也有modifier属性.   (注意:如果在onClick事件

C#多线程编程起步

.NET将关于多线程的功能定义在System.Threading名字空间中.因此,要使用多线程,必须先声明引用此名字空间(using System.Threading;). 即使你没有编写多线程应用程序的经验,也可能听说过"启动线程""杀死线程"这些词,其实除了这两个外,涉及多线程方面的还有诸如"暂停线程""优先级""挂起线程""恢复线程"等等.下面将一个一个的解释. a.启动线程 顾名

javascript编程起步(第七课)_基础知识

过年到现在一直都比较忙,辜负大家了. 今天就学习函数吧,虽然语句还没有说完. 函数是javascript语言的一个很重要的内容,但也很复杂. 下面来看看javascript函数. 函数是有function加函数名和一对带有参数括号,以及大括号组成的,其中大括号里是 主体javascript语句. 例: function hanshuname(js) //hanshuname是函数名. { document.write(js,"<br>"); //是函数的主体语句. } 函数

java script编程起步(第三课)_基础知识

第三课终于和大家见面了, 大家要感谢 Actions 的辛勤劳动啊, 好好利用论坛给大家提供的资源和教程, 希望大家一起学习提高 :D 大家有什么意见, 建议或者想法, 可以到本版的教程问答区 或 站务管理版的 建议或意见 去发表, 我们会及时给您反馈 :) 下面是今天的学习重点: A.补充上课的变量内容 B.if语句的基本语法 C.window.com()基本用法 A.变量 1.变量的类型规则 java script是无类型的,他的变量可以放任何数据类型的值. 2.变量的声明 在java sc

javascript编程起步(第五课)_基础知识

鼠标事件(上)   随着课程的进行,能跟着下来的人是越来越少了,不知道是不是因为没有太多的表现,只是死记的东西,大家都没有兴趣啊.其实网页上 的很多特效,动作大都是用javascript来实现的,没有javascript的网页,就象一个人没有了肌肉一样.但是所有的动作都是有函数来控制的 ,而控制语句是基础中的基础.希望大家能耐心的学下去.今天的课程就轻松一下,学习点能见到效果的. 主要内容就是基于鼠标的事件,有如下几种: 1.mouseover(鼠标移至) 2.mouseout(鼠标移出) 3.

javascript编程起步(第一课)_基础知识

不管你以前学没有学过java script,本教程都能带您进入java script的殿堂,领悟java script的魅力.   大家来到这里,都是java script的爱好者,对java script都多多少少有一定的理解.关于java script的历史等就不做介绍了,我们直接来学习它,用它.   也许大部分人都认为java script是在客户端运行的,其实不然.java script有两种不同的运行环境,一个是在服务器端的javascript,另一个就是客户端的javascript了