星期六, 七月 14, 2007

Using wxWidgets on Windows

在Windows上使用除了VC之外的UI开发工具进行开发工作其是来还真是挺麻烦的。不过,自己掏钱安装一套那个东西实在是有点力不从心。如果贪图方便的话,建议使用Dev-cpp或者Eclipse套装来工作。如果不嫌麻烦,可以自己从网上将需要的工具一个一个的下载下来,自己建立一个UI开发工作环境。

所需要的软件有:
  1. Windows操作系统(如果没有正版的系统,可以考虑多看看Linux下的开发)
  2. MinGW32环境,可以从MingGW-Download网页看到下载连接。
  3. wxWidgets的源代码,本文讨论的就是使用这个开发包。
  4. 合适的编辑环境,这里推荐使用Code::Blocks来配合wxWidgets的开发。
  5. 窗口设计工具wxFormBuilder
第一步,需要搭建编译环境,也就是下载正确的MinGW32包,然后将他们解压缩到一个目录下即可。如果本机之前没有安装合适的GCC环境,就不要下载源代码了。直接下载下面的这些包:
  1. binutils
  2. GCC
  3. MinGW Runtime
  4. windows API
  5. make
然后将他们解压缩到一个目录下,比如d:\mingw32下面。

写一个hello.cpp然后用
d:\mingw32\bin\g++ hello.cpp -o hello
编译一下看看是否可以生成正确的可执行程序。

默认安装的make程序的名字叫做mingw32-make,这可能是为了和系统中原有的make程序区别而设计的。后面说到make的时候,就是指这个程序了。
如果方便,可以将这个bin目录放到PATH环境变量中去。

wxWidgets的特点就是用本地操作系统的图形系统实现了一套移植性非常好的开发包。如果全部采用wx的类库开发,整个程序在很多PC,甚至phone都可以方便的进行编译、运行。但是为了使用中文,请注意在编译系统的时候,一定要要记得支持Unicode。

在以上我们建立的编译系统中工作,需要使用“\build\msw\”目录下面的makefile.gcc脚本来编译。关于编译的设置信息在同一目录中的config.gcc文件中。需要设置的内容有:
  1. UNICODE := 1 支持Unicode,以后所有的代码文件最好使用UTF-8来编写。
  2. BUILD := debug 或者 release,最好设置两次编译两个不同的版本,一个用来调试程序,另一个用来发布程序。
  3. SHARED := 1 采用共享库的方式来编译,也就是wx库最后编译成dll的方式吗?个人觉得调试的时候还是变为dll的共享库比较好,可以有效的减少连接的时间,缩小程序执行程序的大小。发布的时候则可以考虑编译为静态链接库的方式,以一个单文件的方式发布。
  4. MONOLITHIC := 1 将wx库编译成一个大的库文件,而不是多个单独的文件。个人觉得这样简单一下。
其他的一些可以自己看着注释设置。建议编译共享库的release和debug两个版本,以及release的一个release静态库的版本。然后就可以在这个目录下使用GCC的编译器来编译了。
make -f makefile.gcc
喝一杯茶,看看闲书,等待它编译完成吧。

编译结束之后,首先可以考虑编译一下wx代码中带的那些例子,先看看wx的库是否都已经成功的建立了。

然后建议将其中的art、contrib、demos、include、lib这几个目录拷贝出来,其他的内容在以后的开发中已经没有什么用途了。
为了防止以后程序执行中出现找不到动链接库的问题,可以将这些lib目录下的dll文件拷贝到PATH环境变包含的目录下面去。

好马配好鞍,快马加一鞭。编译器、开发包都一应俱全了,再加上Code::Blocks这个开发环境就更加完美了。建议直接使用Night Build版本,不用安装,完全绿色的。

第一次运行后,需要设置一下编译器和调试工具的Global Compiler Setting相关内容:设定MinGW32的目录,然后写入各个应用程序的名字(应该默认好像就是正确的)。

然后可以尝试在向导的指引下建立第一个wxWidgets程序。然后在项目树顶端上下文菜单中选择Build Options项,然后在链接项目中加入我们编译成功的那个库文件,比如debug版本需要链接libwxmsw28ud.a文件,release版本需要链接libwxmsw28u.a文件。在相关查找目录中添加对应这些文件所在的目录位置。

最后,还有一个wxFormBuilder需要安装,不过就很简单了。
它生成的窗口程序代码需要作为我们开发程序的父类来使用,然后在开发中我们直接重写相关的事件处理方法就可以了,非常方便。

其他开发相关的内容,请参考wxWidgets类库的手册。

没有评论: