wxWidgets初學者導引(4)——wxWidgets學習資料及利用方法指導
4 wxWidgets學習資料及利用方法指導
初學者常苦於找不到參考資料。實際上,是找不到,不是沒有。真正有用的資料,常常也就在手邊,只是不知道。有能力熟練地使用一切能用得著的資料,這是水平提高的指標之一。這種能力,同樣,也是在實踐中獲得,而不是有誰為你講一堂課就能得到。
本章的學習資料,從最一般的——書籍開始談起。
4.1 關於C++ wxWidgets的書籍
4.1.1 《使用wxWidgets進行跨平臺程式開發》
關於wxWidgets的書籍還真少見,從亞馬遜上只查到一本《使用wxWidgets進行跨平臺程式開發》(http://www.amazon.cn/gp/product/B00A1WDQ30),部分電子版(含書中例程的原始碼,從http://download.csdn.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.csdn.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...將其加入專案。
執行其他專案,方法類似。
================= 迂者 賀利堅 CSDN部落格專欄================= |== IT學子成長指導專欄 專欄文章的分類目錄(不定期更新) ==| |== C++ 課堂線上專欄 賀利堅課程教學連結(分課程年級) ==| |== 我寫的書——《逆襲大學——傳給IT學子的正能量》 ==| ===== 為IT菜鳥起飛鋪跑道,和學生一起享受快樂和激情的大學 ===== |
相關文章
- WxWidgets學習日記[zz]
- wxWidgets進度條
- 系統引導管理器grub初學者指南(轉)
- 大資料就業指導:前景分析和學習方法大資料就業
- wxWidgets簡單的多執行緒執行緒
- 初學者學習程式設計的方法程式設計
- Netty 框架學習 —— 引導Netty框架
- wxWidgets 2.9.2svn(3.x)最小體積編譯方法編譯
- 初學破解!請指導(4) 破解2SCR(屏保製作軟體)
- LINUX初學者(學習資料)Linux
- PHP學習4——物件導向PHP物件
- 初學設計模式,簡單問題請指導設計模式
- wxWidgets與其他工具庫的比較(上)薦
- java系統學習指導與規劃Java
- 高中生學習c/c++指導C++
- Java初學者最佳的學習方法以及會遇到的坑(內含學習資料)!Java
- Laravel 初學者學習點滴Laravel
- GIT初學者詳細指令學習Git
- CCNA初學者學習經驗!(轉)
- 大學數學新生入門學習數學方法導引 by Ph.D.王小龍
- 記TK教主教導的學習方法
- 大資料學習入門難,給初學者支招大資料
- Python適合初學者學習嗎?Python
- 《統計學習方法》思維導圖-中
- 《統計學習方法》思維導圖-上
- Halcon 學習筆記(4):導航首頁筆記
- 初學物件導向的困惑1物件
- 《考研公共課複習指導》數學篇1:考研數學策略
- MFC、WTL、WPF、wxWidgets、Qt、GTK、Cocoa、VCL 各有什麼特點?QT
- 用 Win7 引導 grub4dos,以及用 grub 引導 Win7Win7
- 我的第3篇破文 cr--CJSFormater 高手請指導、指導!! (4千字)JSORM
- Git使用指導Git
- 美電腦科學學者建議:加強青少年網路安全意識引導
- Linux引導過程和GRUB引導器Linux
- 初學者(7) (4千字)
- 初學者(8) (4千字)
- 初學者(19) (4千字)
- Oracle初學者問題4(轉)Oracle