1. 程式人生 > >在vs2010的開發環境下進行wxWidgets開發入門

在vs2010的開發環境下進行wxWidgets開發入門

wxWidgets是一個歷史悠久、基礎雄厚的,可跨多種平臺的基於C++的、開源的多功能圖形使用者介面庫。支援Windows、OSX、Linux和Unix的32位和64位結構,同時還支援一些移動平臺。如果對C++不熟,wxWidgets庫同時還支援Python、Perl、Ruby和其他的語言的封裝。WxWidgets生成的程式,會讓程式外觀和本地平臺一樣,這和QT只是自己繪製介面風格不太一樣。最初它曾被命名wxWindows,它受著Windows的MFC的深遠影響,很多概念都和MFC很類似,最初命名的基本含義也就是MFC的移植庫,後面為了不讓使用者引起“只能在Windows下使用”的歧義,才正式改名為wxWidgets。

1、下載wxWidgets 3.1.0和vs2010

·        下載wxWidgets原始碼包(官網),我用的是3.1.0版;

·        安裝Visual Studio。我用的是VS 2010;

下載地址:http://sourceforge.net/projects/wxwindows/files/?source=navbar

下載完以後安裝到任意目錄下。(其實就相當於解壓縮一下,下載的是原始碼)

2、編譯原始碼

a、解壓wxWidgets的原始碼包,會得到一大堆檔案。進入build\msw資料夾,這個資料夾內是專門為Visual Studio提供的工程檔案。在裡面能找到從VC7到V12的工程檔案。我用的是VS 2010所以選擇的是VC10。


b、開始編譯。因為我們下載的是原始檔,而要將其轉化為庫檔案(如果對庫的概念不是很瞭解可以上網查查)就需要編譯整個解決方案,對於編譯時間大家不用擔心,非常的快!!!編譯24個專案大概花3-4分鐘的樣子。

3、通過一個helloWorld初識wxWidgets

(1)、建立測試專案配置專案屬性:

首先建立一個Win32空專案或者直接空專案都可以(注意:如果建控制檯專案後面會報錯)。

將下面的測試原始碼加入到一個cpp檔案中。

1.    #include "wx/wx.h" 

2.    class MyApp: public wxApp[DD1]  

3.    { 

4.        virtual bool OnInit(); 

5.    };

7.    class MyFrame: public wxFrame[DD3]  

8.    { 

9.    public: 

10.      MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); 

11.      void OnQuit(wxCommandEvent& event); 

12.      void OnAbout(wxCommandEvent& event); 

14.  }; 

15.  enum[DD5]  

16.  { 

17.      ID_Quit = 1, 

18.      ID_About, 

19.  }; 

21.      EVT_MENU(ID_Quit,  MyFrame::OnQuit) 

22.      EVT_MENU(ID_About, MyFrame::OnAbout) 

23.  END_EVENT_TABLE()  [DD6] 

24.  bool MyApp::OnInit()[DD7]  

25.  { 

26.      MyFrame *frame = new MyFrame(wxT[DD8] ("Hello World"), wxPoint(50, 50), wxSize(450, 340) ); 

27.      frame->Show(true); 

28.      SetTopWindow(frame); 

29.      return true; 

30.  } 

31.  MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) 

32.         : wxFrame(NULL, -1, title, pos, size) 

33.  { 

34.      wxMenu *menuItem = new wxMenu; 

35.      menuItem ->Append( ID_About, wxT("&About...") ); 

36.      menuItem ->AppendSeparator(); 

37.      menuItem ->Append( ID_Quit, wxT("E&xit") ); 

38.      wxMenuBar *menuBar = new wxMenuBar; 

39.      menuBar->Append(menuItem, wxT("&File") ); 

40.      SetMenuBar( menuBar ); 

41.      CreateStatusBar(); 

42.      SetStatusText(wxT("Welcome to wxWidgets!") ); 

43.  } 

44.  void MyFrame::OnQuit[DD9] (wxCommandEvent& WXUNUSED(event)) 

45.  { 

46.      Close[DD10] (true); 

47.  } 

48.  void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) 

49.  { 

50.      wxMessageBox(wxT("This is a wxWidgets Hello world sample"), 

51.                    wxT("About Hello World"),  

52.                    wxOK | wxICON_INFORMATION, this ); 

53.  } 

現在編譯這個檔案顯然是通不過的,下面要對編譯選項進行配置

(2)、包含目錄:

在專案——屬性——VC++目錄——附加包含目錄下加入wxWidgets庫的標頭檔案(此標頭檔案是安裝資料夾裡的include資料夾)


這樣系統就能知道你引用的標頭檔案來自哪裡了

(3)、包含庫目錄(讓系統知道你即將使用的庫檔案來自哪裡。)

專案——屬性——VC++目錄——庫目錄在庫目錄里加入wxWidgets安裝資料夾下的lib/vc_lib資料夾



(4)、使用庫。

把專案要用到的lib附加到專案屬性中

專案--屬性--連結器--輸入--附加依賴庫項,編輯這裡要非常注意!!!

加入庫名稱:

1.    wxmsw31ud_core.lib 

2.    wxbase31ud.lib 

3.    wxtiffd.lib 

4.    wxjpegd.lib 

5.    wxpngd.lib 

6.    wxzlibd.lib 

7.    wxregexud.lib 

8.    wxmsw31ud_adv.lib 

9.    wxmsw31ud_html.lib 

10.  wxmsw31ud_xrc.lib 

11.  wxbase31ud_net.lib 

12.  wxbase31ud_xml.lib 

13.  wxexpatd.lib 

14.  winmm.lib 

15.  comctl32.lib 

16.  rpcrt4.lib 

17.  wsock32.lib 

(5)編譯、執行,就出現瞭如下介面了:

 

4、通過分析上述helloWorld例程,深入wxWidgets程式設計框架

 [DD1]wxApp:應用程式類

繼承自該類的子類至少需要定義一個OnInit函式。

 [DD2]DECLARE_APP(MyApp)宣告應用程式例項,便於使用者呼叫wxGetApp()函式獲得應用程式例項的引用。

宣告應用程式例項,便於使用者呼叫wxGetApp()函式獲得應用程式例項的引用。

 [DD3]wxFrame:框架視窗類

一個Frame視窗是一個可以容納別的視窗的頂級視窗,通常擁有一個標題欄和一個選單欄。

 [DD4]DECLARE_EVENT_TABLE()宣告事件表,告訴wxWidgets這個類想要自己處理某些事件。

 [DD5]用列舉自定義識別符號。通常,可以通過列舉、常量或者巨集定義的方式來自定義識符。

 [DD6]

BEGIN_EVENT_TABLE(MyFrame, wxFrame)  
 
END_EVENT_TABLE() 

實現事件表,告訴wxWidgets來自使用者或者其他地方的事件應該怎樣和類的成員函式對應起來。

 [DD7]bool MyApp::OnInit()函式通常應該建立一個視窗,對傳入的命令列引數進行解析,為應用程式進行資料設定和其他的一些初始化操作。如果該函式返回為true,wxWidgets將開始事件迴圈用來接收使用者輸入,並在必要時處理這些輸入;如果該函式返回為false,wxWidgets將會釋放它內部已經分配的資源,然後結束整個程式的執行。

 [DD8]wxT巨集

作用是,讓程式碼相容Unicode模式,與另外一個_T巨集的作用是完全一樣的。使用這個巨集不會帶來執行期的效能損失。(此外,還有”_()”標記,是用來告訴wxWidgets將其中的字串翻譯成指定語言的版本。)

 [DD9]

void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) 

事件處理函式的實現。

 [DD10]事實上,Close(true);函式並不直接關閉frame視窗,而是產生一個wxEVT_CLOSE_WINDOW事件,這個事件的預設處理函式會呼叫wxWindow::Destroy函式釋放frame視窗。

 [DD11]MPLEMENT_APP(MyApp) 創I建MyAPP例項。


5、wxWidgets程式一般執行過程

1. 依照系統平臺的不同,不同的main函式或者winmain函式或者其它類似的函式被呼叫(這個函式是由wxWidgets內部提供的,而不是由應用程式提供的)。wxWidgets 初始化它自己的資料結構並且建立一個MyApp的例項。

2. wxWidgets呼叫MyApp::OnInit函式,這個函式會建立一個MyFrame的例項。

3. MyFrame的建構函式通過它的基類wxFrame的建構函式建立一個視窗,然後給這個視窗增加圖示,選單欄和狀態列。

4. MyApp::OnInit函式顯示主視窗並且返回真。

5. wxWidgets開始事件迴圈,等待事件發生並且將事件分發給相應的處理過程。

應用程式會在以下情況下退出:主視窗被關閉,使用者選擇退出選單或者系統按鈕和系統選單中的關閉選項(這些系統選單和系統按鈕在不同的系統中就往往千差萬別了)。

5、學習材料清單

6、深入學習路線

看書策略:

建議同時看《使用wxWidgets 進行跨平臺程式開發》和《wxWidgets tutorial》這兩本書,同步地實踐書中的程式。

案例練習:

原始碼包解壓後,其中.\samples目錄提供了很多演示和示例的專案。

相關推薦

vs2010開發環境進行wxWidgets開發入門

wxWidgets是一個歷史悠久、基礎雄厚的,可跨多種平臺的基於C++的、開源的多功能圖形使用者介面庫。支援Windows、OSX、Linux和Unix的32位和64位結構,同時還支援一些移動平臺。如果對C++不熟,wxWidgets庫同時還支援Python、Perl、Ru

如何在Windows環境進行jni開發--NDK環境配置

ndk程式設計(native developer kit),關於jni(java native interface)這方面的使用,其實早在2014年的時候,就研究過這方面的知識,只是當時工作上用不到所以就沒對這方面進行一個彙總! 近期由於個人維護Android平

手把手教你如何在Android進行JNI開發入門

在進行Android開發的過程中,我們必定會遇到視訊影象處理、高強度密集運算、特殊演算法等場景,這時我們就不得不需要去接觸一些C/C++程式碼,進行JNI開發。下面我將從Android.mk和CMake這兩種方式教大家如何進行開發。文章結尾將給出演示的專案程式碼,如果你能耐心地仔細看完,相信你一定能掌握

Idea環境使用JFinal開發Web專案入門詳解(圖文版)

       最近看到網上有人推薦使用JFinal(官網:http://www.jfinal.com/)開發WEB + ORM專案,自己於是到官網學習JFinal,官方文件提供了使用eclipse開發Jfinal專案的步驟,只是對Idea做了簡略說明,沒有詳細的介紹,對於智

ArcGIS10.2在VS2010/VS2012/VS2013 進行二次開發及編譯出錯解決

平臺:VS2010、VS2012、VS2013 + ArcGIS 10.2 + Win7 64bit 使用ArcGIS10.2結合MFC進行二次開發,編譯出錯。 首先配置工程,在工程上右鍵->

Eclipse開發環境搭建Maven

-1 mage cal 配置文件 pub 添加 apache local 打開 (一)開發環境   Eclipse Mars2(4.5.2) + Maven 3.5.0 (二)配置步驟   1.首先,需要將Maven環境配置好,maven下載地址:http://maven

windows環境搭建Java開發環境(一):jdk安裝和配置

變量 win jns jdk安裝 分享 tool 直接 www. 技術 一、資源下載   官網:http://www.oracle.com/technetwork/java/javase/downloads/index.html   本人安裝的是jdk1.8,百度雲資源:鏈

vue跨域的問題,在開發環境

直接 index 文件 訪問 顯示 vue pat user rewrite 找到config文件夾下的index.js proxyTable: { ‘/api‘: { target: ‘http://訪問網址/‘, //設置調

win10環境搭建彙編開發環境(軟體是DOSBOX和MASM32)

彙編真的很重要,很重要!應一位小夥伴的要求,來寫下我的彙編開發環境傻瓜式教程。哈哈,怕他打我! 以下是搭建基於DOSBOX+MASM32的組合語言開發環境記錄。 一.工具準備 1.下載DOSBOX 工具介紹:DOSBox 是一個 DOS 模擬程式,由於它採用的是 SDL 庫,所以可以

Linux centos 7 環境搭建vue開發環境

onf 信息 成功 tps HERE tar.gz linu configure ucc 下載node.js安裝包 #wget https://npm.taobao.org/mirrors/node/v10.13.0/node-v10.13.0.tar.gz #tar -z

python開發環境pip和pip3的區別

在很多教程裡都有遇到的pip和pip3,簡單來說pip和pip3是一樣的,只是為了區別python2和python3之間的呼叫,避免衝突而進行的設定。如果你的電腦只安裝了python3,那麼你使用pip和pip3效果都是一樣的,如果你的電腦只安裝了python,那麼你無法使用pip3。 同時

開發環境PP檔案的建立

開發環境下Provisioning Profile檔案的建立。 當我們在做iOS開發的時候,總是新增很多證書,來保證安全性。Provisioning Profile我們又稱PP檔案。這個檔案將證書、App Id和裝置相關聯。本章節就是教大家如何建立開發環境下的

Android——離線開發環境的安裝與配置

前提jdk安裝並且配置成功。參考部落格https://blog.csdn.net/t_yoo_csdn/article/details/79726772一, gradle方法1:(驗證可以)在工程目錄\gradle\wrapper\gradle-wrapper.propert

EOS開發環境eosio_assert顯示詳細錯誤資訊

前幾天在本地環境下除錯EOS程式碼時,執行程式碼之後只有簡簡單單的"Error 3050003: eosio_assert_meesage"的輸出,無法定位到哪個eosio_assert報出的錯誤。於是,查找了一番,解決之後記錄下。 首先,在啟動Docker的時候,加上--verbose-htt

在windows進行 linux 開發 (轉載第七星塵的技術部落格)

1,介紹Vagrant 我們做web開發的時候經常要安裝各種本地測試環境,比如apache,php,mysql,redis等等。出於個人使用習慣,可能我們還是比較習慣用windows。雖然說在windows下搭建各種開發環境是可行的,各大開發環境都有windows版本。然而在windows下配置有時候會顯

Python開發環境Anaconda3使用指南(入門篇)

雖然說,我認為IDLE是世界上最美的Python開發環境,但是確實略顯簡陋,對Python內功(

windows 操作環境搭建NodeJS開發環境

第一步:下載安裝檔案 下載nodejs,官網:http://nodejs.org/download/ 你可以根據不同平臺系統選擇你需要的Node.js安裝包。 Node.js 歷史版本下載地址:https://nodejs.org/dist/ 我

VELT-0.1.5開發:在VS2013進行python開發

快樂蝦歡迎轉載,但請保留作者資訊本文僅適用於vs2013 + velt-0.1.5VELT的全稱是Visual EmbedLinuxTools,它是一個visual studio外掛,用以輔助完成Lin

開發環境未找到 BASE64Encoder及BASE64Decoder的解決辦法

Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder/BASE64Decoder類這個類是sun公司的

Android正式和開發環境切換操作,BuildConfig幫你一步到位

在Android開發中,正式和測試環境的切換,一般情況下我們都會去設定一個tag,通過此tag來改變開發環境。 以前的寫法一般都是: public class BaseApplication extends Application { public boolean