您的一個「讚」,就能讓我高興一整天!
  • 若文章中的教學解決不了您的問題,請直接找電腦公司會比較快。
  • 原本我不寫廠商的邀約文,一方面真的是很忙,另一方面我也不是什麼超高人氣部落格,但還是許多廠商會寄信過來邀約。因此,我現在決定如果廠商所提供的產品,我覺得很有用或有趣的,我會「免費」接案( changyang319@gmail.com ),但寫好寫壞,還有截稿的時間不要限制我喔。
電腦重灌 還原鍵製作還原光碟製作修復光碟WinXPWin 7(英文)Win7(中文)Windows 8重灌前準備驅動程式安裝更新Hotfix學習DOS檢查硬碟壞軌測試記憶體如何進入BIOS開機順序/電腦溫度安全模式
常見問題 Wi-Fi不能上網螢幕變黑開機到一半卡住主機不斷重開機喇叭沒有聲音麥克風沒有聲音主機風扇很吵主機自動斷電光碟機退不出來
選購經驗 筆記型電腦平板電腦桌上型電腦印表機分享器雙螢幕LCD液晶螢幕滑鼠UPS不斷電系統電視卡無線網卡MacBook Air平板VS筆電
辦公文書 Word必犯錯誤Word合併列印Excel樞紐分析表備份Outlook郵件FTP軟體操作Word打一半當機設定Outlook收Gmail
IP分享器 無線WiFi延伸(WDS)串接分享器另類分享器接法測Wi-Fi訊號頻道DDNS(D-Link)DDNS(No-IP)

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-1.jpg

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

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

wxWidgets-2.jpg

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

wxWidgets-3.jpg

  以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專案」,然後設定好想要的名稱及位置後,再點擊〔確定〕。

wxWidgets-4.jpg

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

wxWidgets-5.jpg

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

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

wxWidgets-6.jpg

  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"
(你可以直接將上面這段文字直接複製貼上至你的設定欄位裡)

wxWidgets-7.jpg

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


wxWidgets-8.jpg

  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的視窗了。

wxWidgets-9.jpg

錯誤訊息

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

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

wxWidgets-10.jpg

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

Posted by 唐先生 at 痞客邦 PIXNET Guestbook(1) 人氣()


留言列表 (1)

Post Comment
  • kylix
  • Good tutorial!
  • thx! 你是我認識的kylix嗎?

    唐先生 replied in 2011/05/19 23:39