1. 程式人生 > >wxWidgets初學者導引(3)——wxWidgets應用程式初體驗

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

3 wxWidgets應用程式初體驗

  本文中所有的體驗,在Code::Blocks中進行。

  為了在Code::Blocks中編譯執行C++寫的wxWidgets程式,需要再做些設定。

  首先,需要在環境變數裡新增一個wxWidgets根目錄環境變數。設定方法類似於2.3中設定PATH變數的方法。在Win7中,右擊桌面上的“計算機”圖示,選選單中的“屬性”,在“系統屬性”對話方塊中,完成如下圖從15的一系列操作。新增的變數命名為wxwin,值為X:\wxWidgets-3.0.0。

   

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

  開啟Code::Blocks,選擇選單Settings->Global Variables…,在設定default

下新建立一個wx變數,在Build-in fields:下,base中填入“${wxwin}”(wxwin是剛才設定好的一個變數),include中填入“${wxwin}\include”lib中填入“${wxwin}\lib”,這些都是開發中需要用到的“環境”中的一部分。

   

3.1 由“空專案”建立和執行GUI應用程式

  下面將“白手起家”,由建立“空專案”開始,做一個簡單的應用。程式改編自線上教程《wxWidgets tutorial》(http://zetcode.com/gui/wxwidgets/)的“First programs in wxWidgets”部分的第一個程式。這個教程,將作為建議學習方案中的主教程之一。

3.1.1 建立專案

  建立專案的過程是:

  (1通過選單“File”->“New”->“Project…”,選擇Empty project建一個空專案

  

  (2)點選“go”按鈕後,有一個歡迎介面,點選“next”,出現下圖,填入專案名。我建立的專案名稱為wxTest

   

  (3)點選“next”後,要求選擇編譯器及生成的目標檔案型別,照下圖選擇

   

  (4)點選“Finish”後,將生成一個空專案,如圖

   

  (5)點選選單File->New->File...為專案新建一個源程式檔案。在連續出現的幾個對話方塊中,選擇要增加的檔案型別是“C/C++ source

”(即原始檔),再一個對話方塊中選擇語言是“C++”。接著,在下圖所示的對話方塊中,給出帶完整路徑的原始檔名(本例中用main.cpp),注意將Debug複選框選中。

   

  (6)點選“Finish”後,將下面的源程式輸入(或貼上)到檔案main.cpp中。

#include <wx/wx.h>
class Simple : public wxFrame
{
public:
    Simple(const wxString& title);
};
 
Simple::Simple(const wxString& title)
   : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150))
{
  Centre();
}
 
class MyApp : public wxApp
{
  public:
    virtual bool OnInit();
};
 
IMPLEMENT_APP(MyApp)
 
bool MyApp::OnInit()
{
    Simple *simple = new Simple(wxT("Simple"));
    simple->Show(true);
    return true;
}

  加入了原始碼之後的專案如下圖所示:

   

  可以暫時不考慮程式中的語句是什麼意思。能完成執行程式的完整過程,是我們當前的任務。能執行程式了,後面再看“門道”。

  下面將對這個專案進行編譯,進而看到執行結果。

3.1.2 編譯和執行專案

  選擇選單“Build”中的“Build”選項(或者工具欄中的相應按鈕)對專案進行編譯、連線。程式第一行即出現錯誤。錯誤提示是:

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\mswudX:\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的方法,是通過“嚮導”開發應用。這種方法用得不是很多,可以作為了解。

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

  (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設計工具和程式型別,用wxSmithDialog 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小節,可能會幫助你排除問題,讓程式正確執行。

================= 迂者 賀利堅 CSDN部落格專欄=================
|== IT學子成長指導專欄 專欄文章的分類目錄(不定期更新) ==|
|== C++ 課堂線上專欄  賀利堅課程教學連結(分課程年級) ==|
|== 我寫的書——《逆襲大學——傳給IT學子的正能量》    ==|
===== 為IT菜鳥起飛鋪跑道,和學生一起享受快樂和激情的大學 =====

相關推薦

wxWidgets初學者導引3——wxWidgets應用程式體驗

3 wxWidgets應用程式初體驗  本文中所有的體驗,在Code::Blocks中進行。  為了在Code::Blocks中編譯執行C++寫的wxWidgets程式,需要再做些設定。  首先,需要在環境變數裡新增一個wxWidgets根目錄環境變數。設定方法類似於2.3中

wxWidgets初學者導引6——wxWidgets學習材料清單

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

wxWidgets初學者導引1——前言

wxWidgets初學者導引全目錄   PDF版及附件下載1 前言1.1 關於“導引”  大學中的“C++程式設計”課程,以掌握基本的C++語法,並運用其解決一般的計算問題為目的。學生在學習中編出的程式,在“長相”上,與實際的產品不太一樣。我的學生感慨,為何我程式設計序總是要

C程序設計導引3

判斷 一個 等價 之前 復合語句 spa 用法 舉例 遇到 第4章 循環語句和goto語句 4.1 while語句 語法格式: while (<表達式>) 語句; 在這個語句中,表達式描述循環的條件,如果表達式的值為0,就停止語句,否則繼續執行語句部分。語句部

3Docker應用部署、遷移與備份

目錄: 1、應用部署 1.1、MySQL部署 1.2、tomcat部署 1.3、Nginx部署 1.4、Redis部署 2、遷移與備份 2.1、容器儲存為映象 2.2、映象備份 2.3、映象恢復與遷移 1、應用部署 1.1、MySQL部署 (1)拉

WPF的訊息機制- 讓應用程式動起來

原文: WPF的訊息機制(一)- 讓應用程式動起來 前言 談起“訊息機制”這個詞,我們都會想到Windows的訊息機制,系統將鍵盤滑鼠的行為包裝成一個Windows Message,然後系統主動將這些Windows Message派發給特定的視窗,實際上訊息是被Post到特定視窗所線上程

轉載Android應用程式簽名系統的簽名(SignApk.jar)

1. 在安卓工具箱中,下載SignApk.jar。 2. 拿到終端上系統的簽名(由定製系統的廠商提供): 3. 在應用程式的專案中配置: androidManifest.xml中新增android:sharedUserId="android.uid.system"

Docker在Linux上執行NetCore系列更新應用程式 Docker在Linux/Windows上執行NetCore文章系列

轉發請註明此文章作者與路徑,請尊重原著,違者必究。         本篇文章與其它系列文章不同,為了方便測試,新建了一個ASP.Net Core檢視應用。       備註:下面

專案所需的應用程式未安裝,確保已安裝專案型別.csproj應用程式的解決辦法

產生這個的原因其實也很簡單,細心的讀者如果開啟這個檔案的話,從列表中選擇開啟方式的時候就會發現專案檔案的開啟方式已經不是visual studio了,而是Micrisoft visual studio version selector.因此,解決的辦法就是用visual s

雜記3chrome擴充套件程式開發之在目標頁面執行JS指令碼

一、背景說明在雜記(2)中,我們寫了JS指令碼在chrome瀏覽器的開發者模式console頁面執行,用於搶bus票,但這個指令碼有個弊端是當頁面重新整理後,指令碼會自動清除,無法再執行,如何解決呢?我們可以開發一個chrome外掛,啟動這個外掛,當chrome瀏覽器一開啟目

ASP.NET Core 中文文件 第三章 原理13管理應用程式狀態

在 ASP.NET Core 中,有多種途徑可以對應用程式的狀態進行管理,取決於檢索狀態的時機和方式。本文簡要介紹幾種可選的方式,並著重介紹為 ASP.NET Core 應用程式安裝並配置會話狀態支援。 應用程式狀態的可選方式 應用程式狀態 指的是用於描述應用程式當前狀況的任意資料。包括全域性的和使用者特

python學習記錄之---------PYQT5做工具3將python程式打包成exe檔案

工具/版本(1)安裝環境:Windows7 64bit(2)使用版本Python3.6(3)pyqt5python檔案打包成exe格式,需要用到自帶的模組 pyinstaller一、pyinstaller安裝開啟cmd,輸入pip install pyinstaller回車,

Win32應用程式的載入與啟動分析

 轉自 chenxixia 的 Blog Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=455591 設有一個Win32下的可執行檔案MyApp.exe,這是一個Win32應用程式,符合標準的PE格式。

初學HTML1--helloworld體驗

<!--標題標籤又稱h標籤--> <!--字型大小改變,1-6依次變小--> <h1>我是h1標籤</h1> <h2>我是h2標籤</h2> <h3>我是h3標籤</h3>

藍鯨DevOps深度解析系列2:藍盾流水線體驗

開發十年,就只剩下這套架構體系了! >>>   

CS系列:Cobalt Strike體驗

0X01 環境準備 Cobalt Strike安裝包(連結:https://pan.baidu.com/s/1wCHJcJrF6H0wUCdetz3Xjg 提取碼:rjuj) Cobalt Strike服務端:kali(不限於kali,但需要時Linux系統) Cobalt Strike客戶端:Windows

第24課:使用MAT動態分析Spark應用程式體驗

內容:     1.如何使用MAT直接分析執行的Spark程式     2.用MAT直接分析執行的Spark執行初步體驗 一、如何使用MAT直接分析執行的Spark程式     1.啟動MAT     2.啟動需要檢測分析的程式 import org.apache

Django 應用開發3

images alt doc include 新的 logs end esp eat 1.編寫第一個視圖 打開polls/view.py 利用一個URLconf將這個視圖映射到URL上。 首先先創建一個urls.py文件 編寫polls/urls.py 編寫m

應用Mongoose開發MongoDB3控制器controllers

條目 選擇 mongoose 電腦 java 組合 將在 light sta 控制器的基本構成與如何通過路由調用 控制器中通過建立函數並導出,實現前端對數據庫的查詢、新建、刪除與修改的需求,並使之可以在路由中調用,完成API的封裝。本文著重於結構之間的關系,具體問題解決

NoSQL初探之人人都愛Redis:3使用Redis作為消息隊列服務場景應用案例

public 系統服務 就是 toolbar logfile manager 客戶端連接 狀態信息 朋友 http://www.cnblogs.com/edisonchou/p/3825682.html 一、消息隊列場景簡介   “消息”是在兩臺