4 wxWidgets学习资料及利用方法指导
刚開始学习的人常苦于找不到參考资料。实际上,是找不到,不是没有。
真正实用的资料,经常也就在手边,仅仅是不知道。有能力熟练地使用一切能用得着的资料。这是水平提高的指标之中的一个。
这样的能力,相同,也是在实践中获得,而不是有谁为你讲一堂课就能得到。
本章的学习资料,从最一般的——书籍開始谈起。
4.1 关于C++ wxWidgets的书籍
4.1.1 《使用wxWidgets进行跨平台程序开发》
关于wxWidgets的书籍还真少见,从亚马逊上仅仅查到一本《使用wxWidgets进行跨平台程序开发》(http://www.amazon.cn/gp/product/B00A1WDQ30),部分电子版(含书中例程的源代码,从http://download.****.net/detail/cjylg/2997827下载)。
看得好。请支持纸质出版。
这本书的英文版叫《Cross Platform GUI Programming With wxWidget》(见http://www.wxwidgets.org/docs/book/),我浏览过当中的一部分,读起来不难。
4.1.2 wxwidgets的Wiki主页
我推荐阅读的是wxwidgets的Wiki主页(http://wiki.wxwidgets.org/Main_Page)中的Guides & Tutorials部分(http://wiki.wxwidgets.org/Guides_%26_Tutorials)链接的一个教程《wxWidgets tutorial》(http://zetcode.com/gui/wxwidgets/)。写作时再次看wxwidgets的Wiki主页。发现当中的宝,太多了。
开源社区的贡献者不仅提供软件的共享,并且将这样的共享精神延续到指导书籍,必须赞。
4.1.3 《wxWidgets tutorial》
《wxWidgets tutorial》是我极力推荐的一个在线教程。当中的叙述非常少,一直在用小样例,启示读者获得对wxWidgets的认知。我一边读代码。一边练习。完毕了一次愉快的学习之旅。
《wxWidgets tutorial》最后一章开发了一个俄罗斯方块游戏。当看完并同步练习完之时。也就是掌握了用wxWidgets开发应用程序的基本路数之时。
为方便读者。我将这个教程中整理到一个Word文档中,作为本教程的一个附件,一起打包供下载使用。在Word文档中,增加了部分批注,是我在学习中查阅得到的线索。
唯一引发本文读者不爽的是。《wxWidgets tutorial》是英文版的。这事实上是个好事。在这个时代。靠着翻译来的二手中文书还想学到新技术,不拍脑袋也知道这仅仅是天方夜谭的事。
不断学习英语,是IT学生的学习形态。我一直鼓舞同学们“在用英语中学英语”(见http://blog.****.net/sxhelijian/article/details/12177147),这就是一个大好的时机。能否看下去。不决定于你英语水平的高低,而是决定于你的心态。再进一步。这本书中的描写叙述性文字非常少。即使高考英语时是在考场抓阄决定ABCD的,也能看下去,仅仅要去看。
4.2 用好wxWidgets的在线文档
在互联网时代。还有一类资料必须引起学习者的注意。那就是在线的文档和教程。
到wxWidgets的主页http://www.wxwidgets.org/中看看。当中Documentation部分的每个链接,各自都连接着一座宝库,例如以下图:
4.2.1 成熟平台常有在线文档
用微软平台开发程序时,最好的參考是MSDN(http://msdn.microsoft.com/library/),而用Java开发时,有Java SE 6 Documentation(http://docs.oracle.com/javase/6/docs/index.html)。也有部分内容被翻译成中文(http://www.javaweb.cc/JavaAPI1.6/)。
在软件开发过程中,须要的类、函数、宏是记不住的。有在线文档查找。专业人员不记这些。
大多数成熟的平台,既提供真正在线的文档,这些文档也能够下载到本地。通过浏览器阅读。
4.2.2 wxWidgets的在线文档
wxWidgets也有在线文档(http://docs.wxwidgets.org/3.0/),在2.1节,要求读者下载了Manual(HTML).zip。
如今请选择一个自己用着习惯的文件夹,将Manual(HTML).zip解压缩。
我解压缩到了F:\wxWidgets-3.0.0-docs-html。
找到当中的index.html文件,双击打开,例如以下图所看到的,这就是将有大用的最佳參考。
建议用鼠标右击index.html文件,在菜单中选择“发送到->桌面快捷方式”。
在桌面上建立打开在线文档的快捷方式,将方便以后的使用。
4.2.3 查找在线文档
在线文档通过超链接组织起相关材料之间的联系。作为实践。将各个链接点一点。你会有感觉。
举一个样例。在《wxWidgets tutorial》中,Menus and Toolbars部分第一节Simple menu example中的例程,有一段例如以下代码:
SimpleMenu::SimpleMenu(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180)) //以下的样例。要通过在线文档查一查构造函数的參数
{
menubar = new wxMenuBar;
file = new wxMenu;
file->Append(wxID_EXIT, wxT("&Quit"));//练习:想知道Append函数的情况
menubar->Append(file, wxT("&File"));
SetMenuBar(menubar); Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(SimpleMenu::OnQuit));
Centre();
}
如今想知道wxFrame类的构造函数中的各參数含义。要点的链接是:Class->Class Index ->F(wxWidgets中类的命名均以wx开头。取wxFrame中的F),例如以下图:
接着。在“wxFrame Class Reference”页面,能够看到wxFrame类同其它类的继承关系以及其它信息,例如以下图:
我们关心wxFrame类的构造函数,继续往下看,能够在“Constructor & Destructor Documentation”部分看到构造函数的定义及说明:
wxFrame::wxFrame |
( |
wxWindow * |
parent, |
||
id, |
|||||
const wxString & |
title, |
||||
const wxPoint & |
pos = wxDefaultPosition, |
||||
const wxSize & |
size = wxDefaultSize, |
||||
long |
style = wxDEFAULT_FRAME_STYLE, |
||||
const wxString & |
name = wxFrameNameStr |
||||
) |
Constructor, creating the window.
Parameters
parent |
The window parent. This may be NULL. If it is non-NULL, the frame will always be displayed on top of the parent window on Windows. |
id |
The window identifier. It may take a value of -1 to indicate a default value. |
title |
The caption to be displayed on the frame's title bar. |
pos |
The window position. The value wxDefaultPosition indicates a default position, chosen by either the windowing system or wxWidgets, depending on platform. |
size |
The window size. The value wxDefaultSize indicates a default size, chosen by either the windowing system or wxWidgets, depending on platform. |
style |
The window style. See wxFrame class description. |
name |
The name of the window. This parameter is used to associate a name with the item, allowing the application user to set Motif resource values for individual windows. |
这里,构造函数的參数、返回值一目了然。各个參数的含义、使用方法、默认值也能够看到。这是最佳的第一手的开发參考资料。
以下请做一个练习。在读以下的程序时,想知道Append函数的情况。
怎样利用在线文档找到说明?请找到后,再找一遍真正学会。
关于上面的代码中还有哪些疑问,试着通过在线文档给出解答。
4.2.4 查看在线文档的设备支持
假设有条件,布置例如以下图所看到的的工作条件。用双屏,一个看文档。一个敲代码。
当前的学习,有非常多时候用电子版的參考资料。开发中查阅在线文档。是件相当频繁的事情。双屏幕的配置成为须要。
当然。作为在校学生,当场地受限时,也不必太纠结这样的条件了。毕竟,这不是必须。
4.3 在编程环境中找帮助
本文使用的编程环境是Code::Blocks。
C++编码规范中。将类声明、常变量声明、宏定义等保存在头文件(.h)中,而将类、函数的实现用源文件(.cpp)保存。
头文件实际上就是一个非常好的帮助文档。符合规范要求的开发人员,通过恰当的命名,总能够让程序的阅读者“见文知义”,从头文件里得到足够的信息。
在Code::Blocks中,为找到这些信息提供了足够的支持。
事实上。其它IDE,也能做到这一点。
比如。对于4.2.3中的那一段代码:
SimpleMenu::SimpleMenu(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180))
{
menubar = new wxMenuBar;
file = new wxMenu;
file->Append(wxID_EXIT, wxT("&Quit")); //例
menubar->Append(file, wxT("&File")); //练习
SetMenuBar(menubar); Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(SimpleMenu::OnQuit));
Centre();
}
如今。想知道file->Append(wxID_EXIT, wxT("&Quit"));一句中Append函数各參数的含义。由上一句能够看出,file是wxMenu类的实例,仅仅要看wxMenu类的声明就可以。于是,在Code::Blocks中,单击鼠标右键,单击在在菜单中出现的“Find declaration of: wxMenu”选项。如图:
在Code::Blocks中,将打开新的页签,显示wxMenu类的声明。可是wxMenu类并没有Append这样的成员函数。发现wxMenu类是wxMenuBase类的派生类,判断Append应该是继承自wxMenuBase类的成员函数。
用相同的操作,在wxMenuBase类名上单击鼠标右键并选择相应的选项。在新出现的页签中。找到了Append成员函数的4种重载形式的的声明,例如以下图所看到的。
如今做一个练习。找出menubar->Append(file, wxT("&File"));中Append函数的声明,从中看出其调用的方法。
4.4 深入学习路线建议
4.4.1 看书的策略
在完毕本文前3章的工作之后,建议同一时候看《使用wxWidgets进行跨平台程序开发》和《wxWidgets tutorial》这两本书。同步地实践书中的程序。
同步看,意味着交叉、反复再看。
能够先执行例程。有感性认识之后再阅读代码。
一次看不明确不要紧,继续往后看,或者看另外一本书的相关部分,当再次看时。问题也许能够自然化解。
我在学习中。看完了《使用wxWidgets进行跨平台程序开发》的前两章,然后将《wxWidgets tutorial》从头看到完,再看《使用wxWidgets进行跨平台程序开发》中的后面部分时,常能联系起《wxWidgets tutorial》中执行过的样例。这样的安排的体验,感觉不错。
在Code::Block中频繁新建项目非常麻烦,况且每建一个项目还得设置Build options...。我的做法是,建立了一个仅仅包括一个源文件的项目。
全部的练习,都是将代码粘贴到这个文件里完毕。这节约了不少时间。
《wxWidgets tutorial》中的样例写得非常规范。严格执行了.h头文件里写声明,.cpp源文件里写实现的要求。我在实践时,偷了个懒,将本应放在多个文件里的内容,粘贴到前述的一个文件里。当然,诸如
#include <wx/wx.h>
#include <wx/menu.h>
之类的包括头文件要保留。而
#include "menu.h"
之类的自己定义头文件的包括命令,须要删除。由于合并到了同一个文件里,这些头文件根本不存在。
4.4.2 很多其它的案例
安装好的wxWidgets中还提供了非常多演示和演示样例的项目。X:\wxWidgets-3.0.0\demos中是全部的演示案例,演示样例的项目在X:\wxWidgets-3.0.0\samples中,学习到一定时候,执行这些程序。读一读源代码,是一种非常好的学习方式。
比如,wxWidgets的Demo中的一个项目forty。是一个纸牌游戏,执行结果例如以下图:
这个项目中的源文件例如以下图所看到的:
在Code::Block中新建一个项目,将Demo\forty中全部.cpp和.h文件拷贝到项目所在文件夹中,并通过鼠标右击项目名,在弹出菜单上选Add file...的方式将文件增加项目,成为项目的源文件和头文件。Demo为适应多种平台。提供了非常多的文件,一般仅仅须要.cpp和.h文件就可以。如上图中加了方框的部分。
假设项目中有.xpm文件(并非每个项目都有)。也请将这样的文件复制过去,这是一种图形格式文件,程序中通常会用到。项目forty中就有3个这样的文件。
在更极少数情况下,还可能有其它文件须要复制过去。
这能够通过读代码。看源程序中是否写了这个文件名称。偷懒的办法,执行程序,若由于找不到文件出错了。会提示还须要哪个文件。比方项目forty中的about.htm文件。
后两类文件复制过去就可以,是为支持程序执行的,不必通过Add file...将其增加项目。
执行其它项目。方法相似。
================= 迂者 贺利坚 ****博客专栏================= |