wxWidgets教學:編譯靜態LIB檔及第一個Hello World程式

wxWidgets官方網站

在2010年7月19日時,wxWidgets已經Release 2.9.1了,最新版的2.9.1版又新增了更多的控制項可以使用,功能也更加的完整,比起MFC,真的是有過之而無不及。

但是wxWidgets有個小缺點,就是市面上並沒有書可以買來參考,唯一的一本,似乎是官方所出的原文書「Cross-Platform GUI Programming with wxWidgets」,不過這本書在網路上有中譯的簡體中譯的電子檔,有興趣的朋友可以去找。

也因為如此,文件太少,網路上入門的教學也很少,就算有,大多都沒有教學的很詳細,所以很多的新手會因為一開始使用時,因為不熟而無法編譯程式,就很快就放棄了。在前一陣子時間,那段時間wxWidgets用很多,在使用的還算是熟練,可是一陣子沒用了之後,就忘的很快,所以想要留點文件記錄。

下載網站
請至 http://sourceforge.net/downloads/wxwindows/2.9.1/ 網頁,然後點擊「wxMSW-2.9.1-Setup.exe」,下載完之後,請將它安裝好,通常我們都會將它安裝在預設的資料夾「C:\wxWidgets-2.9.1」裡。

編譯wxWidgets LIB檔

wxWidgets安裝好之後,資料夾中並沒有LIB可以供我們使用,通常這些LIB檔都是要我們自己去安裝好之後,在C槽會有「wxWidgets-2.9.1」的資料夾,進入 C:\wxWidgets-2.9.1\build\msw
並開啟「wx_vc9.sln」,或是使用Visual Studio 2008來開啟這個專案檔。

在這個wxWidgets專案檔中,設定了許多的方案組態,如「Debug」、「Release」、,「DLL Debug」、「DLL Release」…,你可以根據自己的需求,來編譯這些檔案,通常我們都是使用「Debug」及「Release」來編譯出「靜態的LIB」檔;如要Build出動態連結檔,就選擇前面有「DLL」開頭的這些組態來編譯。

選好組態後,再執行「建置方案」即可,如下圖:

編輯完成後,就可以在 「C:\wxWidgets-2.9.1\lib\vc_lib」資料夾中,看到一大堆的LIB檔。

以Debug來說,將會Build出下列檔案:
wxbase29ud.lib
wxbase29ud_net.lib
wxbase29ud_xml.lib
wxexpatd.lib
wxjpegd.lib
wxmsw29ud_adv.lib
wxmsw29ud_aui.lib
wxmsw29ud_core.lib
wxmsw29ud_gl.lib
wxmsw29ud_html.lib
wxmsw29ud_media.lib
wxmsw29ud_propgrid.lib
wxmsw29ud_qa.lib
wxmsw29ud_ribbon.lib
wxmsw29ud_richtext.lib
wxmsw29ud_stc.lib
wxmsw29ud_xrc.lib
wxpngd.lib
wxregexud.lib
wxscintillad.lib
wxtiffd.lib
wxzlibd.lib

而Release則會 Build出下列檔案:
wxbase29u.lib
wxbase29u_net.lib
wxbase29u_xml.lib
wxexpat.lib
wxjpeg.lib
wxmsw29u_adv.lib
wxmsw29u_aui.lib
wxmsw29u_core.lib
wxmsw29u_gl.lib
wxmsw29u_html.lib
wxmsw29u_media.lib
wxmsw29u_propgrid.lib
wxmsw29u_qa.lib
wxmsw29u_ribbon.lib
wxmsw29u_richtext.lib
wxmsw29u_stc.lib
wxmsw29u_xrc.lib
wxpng.lib
wxregexu.lib
wxscintilla.lib
wxtiff.lib
wxzlib.lib

第一個Hello World專案

製作好LIB之後,我們當然馬上要來試試身手,來使用一下wxWidgets的LIB囉。請依照下列步驟進行,一定可以製作出一個「可以編譯」的Hello World專案的。

Step 1. 從Visual Studio的Menu中,執行「檔案 / 新增 / 專案」,選擇「Win32專案」,然後設定好想要的名稱及位置後,再點擊〔確定〕。

Step 2. 出現「Win32應用程式精靈」請點擊〔下一步〕,接著「應用程式類型」點選「Windows應用程式」,其他選項再勾選「空專案」,最後再點擊〔完成〕,如下圖:

Step 3. 由於我們開啟的是「空專案」,專案裡面會連一個檔案都沒有,所以請你先新增一個.cpp檔到專案內,你可以直接在專案的上方按下滑鼠右鍵,出現快速選單後,將滑鼠游標移動至「加入」上方,最後再從出現的選單中點選「新增項目」。

Step 4. 出現「加入新項目」對話盒後, 請點選「C++檔(.cpp)」,並且在下方的「名稱」欄位中,輸入檔案名稱,在這裡我輸入的是「Example」,最後再點擊〔加入〕即可。

Step 5. 從專案中開啟剛建立的「Example.cpp」,並將內容填入以下程式碼:

#include “wx/wx.h”
class MyApp : public wxApp
{
public:
virtual bool OnInit();
};

DECLARE_APP(MyApp)
IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
wxFrame* frame = new wxFrame(NULL, wxID_ANY, wxT(“Hello World”));
frame->Show();
return true;
}

接下來是最關鍵的時刻了,雖然我們已經輸入了正確的程式碼,但是光只是這樣還是不能夠編輯的,我們還要為這個專案設定好wxWidgets的Include資料夾路徑、LIB資料夾路徑,以及其他相依性,通常這是最令人頭痛的,但唯有如此,編譯器才會認得我們所輸入的這些wxWidgets特有的函數及類別名稱。

Step 6. 接著請開啟專案的屬性頁,我們以設定組態「Debug」為一個示範,請開啟「組態屬性\C/C++\一般」頁面,接著在「其他Include目錄」中輸入:
“C:\wxWidgets-2.9.1\include”;”C:\wxWidgets-2.9.1\lib\vc_lib\mswud”
(你可以直接將上面這段文字直接複製貼上至你的設定欄位裡)

Step 7. 然後再切換到「組態屬性\連結器\一般」頁面,找到「其他程式庫目錄」,並且在輸入以下文字:
“C:\wxWidgets-2.9.1\lib\vc_lib”

 

Step 8. 接著再切換到「組態屬性\連結器\輸入」頁面,在「其他相依性」中填入以下文字.。
wxbase29ud.lib wxbase29ud_net.lib wxbase29ud_xml.lib wxexpatd.lib wxjpegd.lib wxmsw29ud_adv.lib wxmsw29ud_aui.lib wxmsw29ud_core.lib wxmsw29ud_gl.lib wxmsw29ud_html.lib wxmsw29ud_media.lib wxmsw29ud_propgrid.lib wxmsw29ud_qa.lib wxmsw29ud_ribbon.lib wxmsw29ud_richtext.lib wxmsw29ud_stc.lib wxmsw29ud_xrc.lib wxpngd.lib wxregexud.lib wxscintillad.lib wxtiffd.lib wxzlibd.lib comctl32.lib rpcrt4.lib
(直接複製貼上即可,不用真的自己再那邊打…)

這些LIB檔,就是先前我們使用Debug組態所編譯出來的22個LIB檔,你會發現到上面所加入的LIB檔居然有24個?那是因為只加入那22個LIB檔就編譯程式的話,會有很多「無法解析的外部符號」的錯誤訊息,所以要再額外加入「comctl32.lib rpcrt4.lib」這兩個lib檔,才有辦法順利的編譯程式。

那如果要設定Release組態,要如何設定呢?別擔心,將前面的教學改成以下的設定文字就OK了,要注意喔,裡面的文字和Debug有一點點不一樣,就是「少了一個d」,所以在設定時不要大意,直接複製我以下的文字就可以了:

「組態屬性\C/C++\一般」 -> 「其他Include目錄」:
“C:\wxWidgets-2.9.1\include”;”C:\wxWidgets-2.9.1\lib\vc_lib\mswu”

「組態屬性\連結器\一般」->「其他程式庫目錄」:
“C:\wxWidgets-2.9.1\lib\vc_lib”

「組態屬性\連結器\輸入」->「其他相依性」:
wxbase29u.lib wxbase29u_net.lib wxbase29u_xml.lib wxexpat.lib wxjpeg.lib wxmsw29u_adv.lib wxmsw29u_aui.lib wxmsw29u_core.lib wxmsw29u_gl.lib wxmsw29u_html.lib wxmsw29u_media.lib wxmsw29u_propgrid.lib wxmsw29u_qa.lib wxmsw29u_ribbon.lib wxmsw29u_richtext.lib wxmsw29u_stc.lib wxmsw29u_xrc.lib wxpng.lib wxregexu.lib wxscintilla.lib wxtiff.lib wxzlib.lib comctl32.lib rpcrt4.lib

Step 9. 完成上述的設定後,點擊〔確定〕按鈕,再將這個專案編譯好,就可以順利出現Hello World的視窗了。

錯誤訊息

Build錯誤訊息:「error LNK2019: 無法解析的外部符號 _main 在函式 ___tmainCRTStartup 中被參考 MSVCRTD.lib」

解決辦法:在「連結器」/「系統」的「子系統」,要設定成「Windows (/SUBSYSTEM:WINDOWS)」。

如果你很懶不想自己實作,或是一直設定不好,那你可以直接下載好我這個設定好的專案檔:
Download Example :wxWidgets-Win32.zip

Related posts

Barcode Printer DT2205條碼印表機安裝教學

檔案或資料夾,怎麼會忽然不見了?

米家智慧攝影機-「回放(Play back)」功能

2 comments

changyang319 2011-05-19 - 23:39:40
thx! 你是我認識的kylix嗎?
kylix 2011-05-15 - 20:15:10
Good tutorial!
Add Comment

這個網站使用cookies來改善您的瀏覽體驗。我們預設您同意此設定,但如果您不希望使用cookies,您有權選擇退出。 詳細內容