wxWidgets初學者導引(3)——wxWidgets應用程序初體驗

 

3 wxWidgets應用程序初體驗

  本文中全部的體驗,在Code::Blocks中進行。工具

  爲了在Code::Blocks中編譯運行C++寫的wxWidgets程序,須要再作些設置。學習

  首先,須要在環境變量裏添加一個wxWidgets根目錄環境變量。設置方法相似於2.3中設置PATH變量的方法。在Win7中,右擊桌面上的「計算機」圖標,選菜單中的「屬性」,在「系統屬性」對話框中,完成以下圖從1到5的一系列操做。新增的變量命名爲wxwin,值爲X:\wxWidgets-3.0.0。ui

   

  接下來的設置要在Code::Blocks中進行。spa

  打開Code::Blocks,選擇菜單Settings->Global Variables…,在設置default下新創建一個wx變量,在Build-in fields:下,base中填入「${wxwin}」(wxwin是剛纔設置好的一個變量),include中填入「${wxwin}\include」,lib中填入「${wxwin}\lib」,這些都是開發中須要用到的「環境」中的一部分。.net

   

 

3.1 由「空項目」創建和運行GUI應用程序

  下面將「白手起家」,由創建「空項目」開始,作一個簡單的應用。程序改編自在線教程《wxWidgets tutorial》(http://zetcode.com/gui/wxwidgets/)的「First programs in wxWidgets」部分的第一個程序。這個教程,將做爲建議學習方案中的主教程之一。debug

 

3.1.1 創建項目

  創建項目的過程是:設計

  (1)經過菜單「File」->「New」->「Project…」,選擇「Empty project」建一個空項目調試

  

  (2)點擊「go」按鈕後,有一個歡迎界面,點擊「next」,出現下圖,填入項目名。我創建的項目名稱爲wxTest。code

   

  (3)點擊「next」後,要求選擇編譯器及生成的目標文件類型,照下圖選擇blog

   

  (4)點擊「Finish」後,將生成一個空項目,如圖

   

  (5)點擊菜單File->New->File...爲項目新建一個源程序文件。在連續出現的幾個對話框中,選擇要增長的文件類型是「C/C++ source」(即源文件),再一個對話框中選擇語言是「C++」。接着,在下圖所示的對話框中,給出帶完整路徑的源文件名(本例中用main.cpp),注意將Debug複選框選中。

   

  (6)點擊「Finish」後,將下面的源程序輸入(或粘貼)到文件main.cpp中。

 

[cpp]  view plain  copy
 
 print?
  1. #include <wx/wx.h>  
  2. class Simple : public wxFrame  
  3. {  
  4. public:  
  5.     Simple(const wxString& title);  
  6. };  
  7.    
  8. Simple::Simple(const wxString& title)  
  9.    : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150))  
  10. {  
  11.   Centre();  
  12. }  
  13.    
  14. class MyApp : public wxApp  
  15. {  
  16.   public:  
  17.     virtual bool OnInit();  
  18. };  
  19.    
  20. IMPLEMENT_APP(MyApp)  
  21.    
  22. bool MyApp::OnInit()  
  23. {  
  24.     Simple *simple = new Simple(wxT("Simple"));  
  25.     simple->Show(true);  
  26.     return true;  
  27. }  

 

  加入了源代碼以後的項目以下圖所示:

   

  能夠暫時不考慮程序中的語句是什麼意思。能完成運行程序的完整過程,是咱們當前的任務。能運行程序了,後面再看「門道」。

  下面將對這個項目進行編譯,進而看到運行結果。

 

3.1.2 編譯和運行項目

  選擇菜單「Build」中的「Build」選項(或者工具欄中的相應按鈕)對項目進行編譯、鏈接。程序第一行即出現錯誤。錯誤提示是:

 

[plain]  view plain  copy
 
 print?
  1. fatal error: wx/wx.h: No such file or directory  

 

  也就是說,找不到要包含的頭文件wx\wx.h。

  這須要設置「搜索路徑」解決。選菜單Project->Build options...,在選項卡Search directories中,設置Compiler。經過「Add」增長目錄X:\wxWidgets-3.0.0\lib\gcc_dll\mswud和X:\wxWidgets-3.0.0\include,結果以下圖所示:

  

  接着Build,將再也不有語法錯誤。

  出現的一大堆錯誤提示,來自於鏈接環節,問題是找不到庫文件。

  選菜單Project->Build options...,在選項卡Linker settings中,須要加入要鏈接的「目標文件」。如圖所示,經過Add按鈕加入X:\wxWidgets-3.0.0\lib\gcc_dll文件夾中的全部.a文件(實際上,選擇其中幾個須要的就能夠了。由於不知道究竟須要哪幾個,全選是最省事的辦法):

  

  而後再編譯,0 errors, 0 warnings。成功!

  可是運行程序時,會出現錯誤,以下圖:

   

  按提示來,在X:\wxWidgets-3.0.0\lib\gcc_dll中找到wxmsw30ud_gcc_custom.dll文件,將其拷貝到項目所在文件夾,再運行,就看到了期盼的窗口,如圖所示。

   

  出現上面的運行錯誤,緣由是我在Linker settings加入的是lib\gcc_dll文件夾中的.a文件,這些屬於「動態連接庫」(這個術語本身百度去吧)。這種方式的好處在於編譯速度快,目標代碼小,可是在編譯好的程序運行時,必需要能找到須要的.dll文件。最簡單的辦法,就是拷貝.dll文件。

  這個程序很短,結果也只是一個空空的窗口,可是做爲掌握編譯、運行窗口程序的案例,卻也是足夠的了。

  以上的設置和文件複製,「有經驗」以後能夠提早完成。上面的描述方法,是考慮到但願讀者對各個環節的問題,能多些感受。

 

3.2 利用Code::Blocks的嚮導創建應用

  另外一種在Code::Blocks中創建wxWidgets Project的方法,是經過「嚮導」開發應用。這種方法用得不是不少,能夠做爲了解。

  本節下面的材料,非做者原創,整理自http://www.cnzui.com/archives/962

  利用嚮導開發的具體步驟是:

  (1)經過菜單「File」->「New」->「Project…」,選擇最後面的wxWidgets project。

  

  (2)點擊「Go」進入工程配置嚮導,首先會出來一個歡迎窗口,直接next後,選擇安裝好wxWidgets版本。

   

  注:Code::Blocks 13.12中,已經有了對wxWidgets 3.0.x的支持。須要選對版本,不然可以繼續生成應用程序,可是不能正確鏈接和運行。

  (3)按「Next」,而後輸入項目名「wxtest」,選擇保存項目的文件夾。

  

  (4)繼續「Next」,輸入做者和及一些版權說明信息。

  

  (5)繼續「Next」,選擇GUI設計工具和程序類型,用wxSmith和Dialog based。

  

  (6)按「Next」,接下來的就是wxWidgets環境的一些設置了,這裏咱們輸入剛纔設置的wxWidgets根目錄,直接填入「$(#wx)」就能夠了。

  

  (7)按「Next」,這裏咱們看到默認就是選擇了MinGW編譯器了,下面的咱們只作Debug版本,因此只選上「Create 「Debug」 configuration」。

  

  (9)繼續「Next」,接下來要選擇怎麼使用wxWidgets庫,這裏根據你編譯的wxWidgets庫是什麼樣的來。

  

後注:在wxWidgets Library Setting部分,三個勾都打上。這樣,只要在編譯時SHARED=1,知足了Use wxWidgets DLL,使用動態連接接庫的要求;用MONOLITHIC=1,知足了wxWidgets is built as a monolithic library,構建單一庫;而UNICODE=1,知足支持寬字符串Enable unicode。也就是說,當初編譯wxWidgets時用:mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug和mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release,就能夠知足生支供調試和發佈的代碼兩項要求。

  (10)按「Next」,由於選擇了「Configure Advanced Options」,因此要對使用wxWidgets庫作更多的設置,這裏咱們選上咱們使用lib方式調用(要求編譯wxWidgets時用SHARED=0參數,生成了靜態庫文件)。

  

  (11)按「Next」進到最後一步,咱們選擇須要用到的庫,不知道的話所有選上。

  

  (12)點擊「Finish」,工程隨即創建成功。

  這時能夠查看項目中自動生成的文件,其中有.cpp的源文件,也有.h的頭文件。再細讀,和3.1中輸入的程序長得差很少。

  其實,嚮導的做用,就是經過一系列的選擇,由嚮導程序自動生成應用程序。

  如上步驟建立的應用程序的運行的結果是:

  

  在編譯和運行時,都有可能出現一些錯誤。這通常不是程序自己的問題,而是Code::Blocks的編譯環境和運行的支持文件不全而形成的。

  請參閱3.1.2小節,可能會幫助你排除問題,讓程序正確運行。

 

http://blog.csdn.net/sxhelijian/article/details/26164181

相關文章
相關標籤/搜索