wxWidgets刚開始学习的人导引(4)——wxWidgets学习资料及利用方法指导

时间:2024-04-20 18:04:51

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部分的每个链接,各自都连接着一座宝库,例如以下图:

  wxWidgets刚開始学习的人导引(4)——wxWidgets学习资料及利用方法指导

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文件,双击打开,例如以下图所看到的,这就是将有大用的最佳參考。

  wxWidgets刚開始学习的人导引(4)——wxWidgets学习资料及利用方法指导

  建议用鼠标右击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),例如以下图:

  wxWidgets刚開始学习的人导引(4)——wxWidgets学习资料及利用方法指导

  接着。在“wxFrame Class Reference”页面,能够看到wxFrame类同其它类的继承关系以及其它信息,例如以下图:

  wxWidgets刚開始学习的人导引(4)——wxWidgets学习资料及利用方法指导

  我们关心wxFrame类的构造函数,继续往下看,能够在“Constructor & Destructor Documentation”部分看到构造函数的定义及说明:

wxFrame::wxFrame

(

wxWindow *

parent,

wxWindowID

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 查看在线文档的设备支持

  假设有条件,布置例如以下图所看到的的工作条件。用双屏,一个看文档。一个敲代码。

  wxWidgets刚開始学习的人导引(4)——wxWidgets学习资料及利用方法指导

  当前的学习,有非常多时候用电子版的參考资料。开发中查阅在线文档。是件相当频繁的事情。双屏幕的配置成为须要。

  当然。作为在校学生,当场地受限时,也不必太纠结这样的条件了。毕竟,这不是必须。

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”选项。如图:

  wxWidgets刚開始学习的人导引(4)——wxWidgets学习资料及利用方法指导

  在Code::Blocks中,将打开新的页签,显示wxMenu类的声明。可是wxMenu类并没有Append这样的成员函数。发现wxMenu类是wxMenuBase类的派生类,判断Append应该是继承自wxMenuBase类的成员函数。

用相同的操作,在wxMenuBase类名上单击鼠标右键并选择相应的选项。在新出现的页签中。找到了Append成员函数的4种重载形式的的声明,例如以下图所看到的。

  wxWidgets刚開始学习的人导引(4)——wxWidgets学习资料及利用方法指导

  如今做一个练习。找出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。是一个纸牌游戏,执行结果例如以下图:

  wxWidgets刚開始学习的人导引(4)——wxWidgets学习资料及利用方法指导

  这个项目中的源文件例如以下图所看到的:

  wxWidgets刚開始学习的人导引(4)——wxWidgets学习资料及利用方法指导

  在Code::Block中新建一个项目,将Demo\forty中全部.cpp和.h文件拷贝到项目所在文件夹中,并通过鼠标右击项目名,在弹出菜单上选Add file...的方式将文件增加项目,成为项目的源文件和头文件。Demo为适应多种平台。提供了非常多的文件,一般仅仅须要.cpp和.h文件就可以。如上图中加了方框的部分。

  假设项目中有.xpm文件(并非每个项目都有)。也请将这样的文件复制过去,这是一种图形格式文件,程序中通常会用到。项目forty中就有3个这样的文件。

  在更极少数情况下,还可能有其它文件须要复制过去。

这能够通过读代码。看源程序中是否写了这个文件名称。偷懒的办法,执行程序,若由于找不到文件出错了。会提示还须要哪个文件。比方项目forty中的about.htm文件。

  后两类文件复制过去就可以,是为支持程序执行的,不必通过Add file...将其增加项目。

  执行其它项目。方法相似。

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