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博客专栏================= |
wxWidgets编程起步的更多相关文章
- DirectX API 编程起步 #01 项目设置
=========================================================== 目录: DirectX API 编程起步 #02 窗口的诞生 DirectX A ...
- DirectX API 编程起步 #02 窗口的诞生
在这篇文章里我们先用 windows API 制作一个窗口出来,以后再用 DirectX API 渲染的东西就会显示在这里,控制台那黑白的画面肯定是没法用的. 每次的代码都会更新到Github 首先贴 ...
- OPENSSL编程起步
原文链接: http://blog.csdn.net/itmes/article/details/7711076 WINDOWS平台下OPENSSL的编译和安装使用 OPENSSL是开放源代码的,可以 ...
- PHP Socket编程起步
让我们以一个简单的例子开始---一个接收输入字符串,处理并返回这个字符串到客户端的TCP服务.下面是相应的代码: PHP 代码: ) or die("Could not read input ...
- ubuntu下C/C++编程起步
1. 安装VMware虚拟机软件 2. 在VMware中安装linux系统,这里安装的是Ubuntu.(用 VMware 安装 Ubuntu 12.04详细过程图解) 3. ubuntu有自带文本编辑 ...
- 跟着阿里学JavaDay02——Java编程起步
几乎所有语言的第一个程序都是"HelloWorld" 就像所有单片机初学者一样,点亮第一个LED灯开始 而起初我们编写/学习Java程序,都是通过记事本来编写的,这里推荐一个Edi ...
- 安装wxWidgets遭遇的两大关卡
早就想体验wxWidgets.这学期的C++课,课时还算充裕.关键是弟子们的实践能跟得上,我希望能让他们也浅尝一把GUI开发. MFC能够选.但既然IDE都用CodeBlocks了.还是选wxWidg ...
- wxWidgets:入门
0. 介绍 wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI和其它工具.目前的3.0.0版本支持所有版本的Windows.带GTK+或Motif的Unix和M ...
- 关于PHP学习的各种网站
http://www.shouce.ren/ 各种开发手册 http://yii2.techbrood.com/guide-upgrade-from-v1.html yii2.0和之前版本的区别htt ...
随机推荐
- 在简化版Fedora8上安装jdk-7u25-linux-i586.rpm的过程
台式机的操作系统重新换回了Fedora8,遵从一些大牛的建议,把很多附件去了,尽量让系统保持最简化.这样能熟悉每个软件的安装配置过程,也能减少版本间的冲突. 进入控制台后,查查有没有Java存在系统中 ...
- 免费电子书:The Guide to Minimum Viable Products
本地下载 来自uxPin的免费电子书
- CDN具体解释(篇一)
CDN是一个致力于使内容传输更快.更高效的针对webserver的全局分布式网络.通过CDN来复制使这些内容能够在非常多地方同一时候存在. 比較有名的CDN厂商有AKamari,Amazon Clou ...
- VS2010中生成遇到的 web.config 问题
1. 错误:无法在此路径使用此配置节.当站点管理员使用继承的配置文件中的 <location allowOverride="false"> 锁定对此节的访问时会出现 ...
- 谷歌浏览器保存网页为pdf和.mhtml文件
注:需要安装chrome谷歌浏览器,尽可能安装最新版的浏览器: 一:保存为pdf 打开要加载的网页 空白处右键-----打印 配置要打印的pdf网页 点击 左边----> 保存按钮 即可: ...
- iOS new 和 alloc的区别
一般如果只是 alloc init 那么 用new 是一样的 SomeObject*myObject =[[SomeObject alloc] init]; SomeObject*myObject = ...
- break的使用方法
private static void test() { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { Syst ...
- Flash builder 调试技巧 (分享)
如果这个Flash能直接自己运行,例如Air或者简单不依赖于外部网页的flash,当然非常容易调试.直接F11嘛~~~ 但是,如果这个Flash要依赖于外部环境才能运行,那该怎么调试呢? 核心 ...
- CEF 各个版本适应的平台参考表
This Wiki page provides information about CEF branches and instructions for downloading, building an ...
- IT忍者神龟之 oracle行转列、列转行
一.行转列 须要将例如以下格式 转换为: 这就是最常见的行转列,主要原理是利用decode函数.聚集函数(sum).结合group by分组实现的 create table test( id varc ...