和 gtk、qt、swt、swing 一樣,wxwidgets 也是一種開源跨平台的 gui 框架。因 wxwidgets 和 mfc 有些淵源,有些親近,故要體驗一番 wxwidgets。現在最新版是 2.8.7。wxwidgets 程式還可執行於 windows ce、palm os。不但包括 gui,還有 media、socket、odbc 等庫。
本篇介紹 vc++6.0 下如何搭建 wxwidgets 的開發環境,包括編譯 wxwidgets 原始碼和配置 vc 環境。所用 wxwidgets 的版本是 2.8.7。
注意要給 wxwidgets 有足夠的剩餘空間,單是編譯乙個版本的靜態庫就會增至300多m,如果還要編譯動態庫再選擇上 debug 或者 release、ascii 或是 unicode 等,還要編譯 sample 的話,最後空間能夠暴到 2g。
第二步:編譯 wxwidgets
編譯方式有兩種,一種是在 vc++ 中開啟 wx.dsw 進行編譯,另一種是用 nmake 在命令列下編譯。
1) nmake 編譯
執行 cmd.exe 來到命令列下,進入到目錄 d:/wxwidgets-2.8.7,然後執行
d:/wxwidgets-2.8.7>nmake -f makefile.vc
預設是編譯成 debug 版的靜態庫。也許我們在編譯之前需要根據自己的需要進行一些設定:
開啟 d:/wxwidgets-2.8.7/include/wx/msw/setup.h
保證第 110 行的 #define wxuse_debug_new_always 設定為 0。預設是 0 的。
將 1137 行的 #define wxuse_iostreamh 設定為 0,否則無法使用 vc 的模板庫(不能用 std 命名空間下的)。預設是 1。
如果要使用 wxwidgets 提供支援資料庫的 odbc 類,將 #define wxuse_odbc 設為 1。預設是 1。
如果你想生成動態庫,或生成的是 release 版的,你可以修改 d:/wxwidgets-2.8.7/build/msw/config.vc 檔案。開啟該檔案你能看到可以更改的選項,其中重要的幾個如下:
# what type of library to build? [0,1] -- 生成庫的型別,0為靜態庫,1為動態庫
shared = 0
# compile unicode build of wxwidgets? [0,1] -- 是否使和 unicode,0 否,1 是
unicode = 0
# type of compiled binaries [debug,release] -- 是 debug 還是 release
build = debug
其中還有許多顧名思義的選項,請根據需求修改。
對於 config.vc 中的選項也可以通過命令列覆蓋掉配置檔案中的值,如編譯命令用
d:/wxwidgets-2.8.7>nmake -f makefile.vc shared=1 unicode=1 build=release
就是編譯 release 版,支援 unicode 的動態庫了。
動態庫和靜態庫的不同體現在使用上,靜態庫中的**能編譯進應用程式的 exe 檔案中,這個 exe 檔案可單獨發布,但體積較龐大。動態庫可讓 exe 檔案執行時載入,雖然 exe 檔案體積小了,但發布時必須帶著相應的動態庫檔案。
2) vc 編譯
還可用 vc++ 開啟 d:/wxwidgets-2.8.7/build/msw/wx.dsw,然後選擇 build->batch build... ,我們看到每個工程都有 16 個配置,請根據應用需求勾選你的配置,如所有工程的 win32 release 和 win32 debug 版本,然後 build,如果你照單全收,編譯將非常耗時而佔空間。這種編譯方式就是可以一下操作幫你編譯出所有需要的版本。
好,等等編譯完之後,在目錄 d:/wxwidgets-2.8.7/lib/ 會有產生乙個目錄:vc_lib 是靜態庫的目錄,預設編譯有 17 個靜態。如果是編譯成動態庫則會產生目錄 vc_dll。在 vc_lib 中有 mswd 目錄,release 版對應的是 msw,裡面含有 debug 和 release 版的 setup.h。
注意到 debug 版和 release 以及和 unicode 、動態庫、靜態庫組合條件編譯生成的檔案和目錄名。
靜態庫編譯到 d:/wxwidgets-2.8.7/lib/vc_lib 目錄中
動態庫編譯到 d:/wxwidgets-2.8.7/lib/vc_dll 目錄中
檔案命名為 wxmsw28d_core.lib 檔案為例:
wxmsw28_core.lib ---- release,非 unicode 版
wxmsw28d_core.lib ---- debug,非 unicode 版
wxmsw28u_core.lib ---- release,unicode 版
wxmsw28ud_core.lib ---- debug,unicode 版
對於 dll 檔案的命名規範也一樣的。
在 vc_lib 和 vc_dll 下如果全編譯了會有四個目錄,msw、mswd、mswu、mswud 意義同上。
編譯完後可以把那些過程中的目標檔案刪了,它們佔的空間實在是太大。要是你還想以後重新編譯用就留著吧。
第三步:建立 wxwidgets 專案
注意:編譯成不同版的執行**應填入相應的 additional include directories 和 addtional library path。
編譯成依賴 dll 的執行檔案還需要加上預處理指令 wxusingdll
用unicode 編譯則需要加上預處理指令 _unicode
還有一種 universal 編譯,要加上預處理指令 __wxuniversal__
這樣乙個普通的wxwdigets專案就設定好了.
我們測試 wxwidgets 自帶的例子 minimal。新建乙個 minimal.cpp 檔案,內容同 d:/wxwidgets-2.8.7/samples/minimal/minimal.cpp,編譯,不出意外,成功了!
也可設定全域性的目錄
前面我們是為專案配置 additional include directories 和 additional library path。我們可以把這設定成全域性的。就可以不用在專案中單獨設定。全域性設定有其缺陷,無法分開是 vc_lib 還是 vc_dll 中的 lib,是 mswd 還是 msw 中的 wx/setup.h 檔案。在這裡設定 source files 還是必要的。並且在下面前兩個 include files 放在全域性設定裡也較合適。
進到 vc++ 的 tools->options->directories,選擇 "include files" 後,新增
d:/wxwidgets-2.8.7/include
d:/wxwidgets-2.8.7/contrib/include
d:/wxwidgets-2.8.7/lib/vc_lib/mswd
對應於 project settings -> c/c++ tab->preprocessor 中的 additional include directories
再選擇 "libraries files",新增
d:/wxwidgets-2.8.7/vc_lib
對應於 project settings -> link tab -> input 中的 additional library path
再選擇 "source files",新增
d:/wxwidgets-2.8.7/src
最後大致比較一下生成程式的大小
release 靜態庫版(vc_msw) minimal.exe 1.11m,可單獨發布
debug 靜態庫版(vc_mswd) minimal.exe 2.52m,可單獨發布
release 動態庫版(vc_mswdll) minimal.exe 68k,加上wxmsw28_core_vc_custom.dll (2.85m) 和 wxbase28_vc_custom.dll (1.11m),共 4m
debug 動態庫版(vc_mswddll) minimal.exe 96k,加上wxmsw28d_core_vc_custom.dll (4.26m) 和 wxbase28d_vc_custom.dll (1.82m),共 6.1m
這是乙個簡單的 wxwidgets 程式,只用到了兩個動態庫的情況。在用到 wxwidgets 庫較少時用靜態庫來編譯發布檔案會小一些,若是用到元件多的時候,可能用動態庫方便些,請酌情決定。
wxWidgets編譯和在VC 6 0中的配置
1 安裝 執行wxmsw 2.8.3 setup1.exe,將之安裝到不帶空格符號的目錄中,本例為c wxwidgets 2.8.3 2 編譯和配置 1 用vc6.0編譯 進入c wxwidgets 2.8.3 build msw,用vc開啟wx.dsw工程檔案。進入build batch buil...
vc6 0 除錯小結
現在都用vs2008了,vc6的速度還是很懷念,來個小結吧。斷點相關快捷鍵 1.f9在當前游標所在的行下斷點,如果當前行已經有斷點,則取消斷點.f5除錯狀態執行程式,程式執行到有斷點的地方會停下來.f10單步執行程式.ctrl f10執行到游標所在行.f11和f10的區別是,如果當前執行語句是函式呼...
VC 6 0遠端除錯
先明確下概念,遠端除錯嘛,自然是兩個機器之間除錯。程式執行在目標機器上,偵錯程式執行在本機。當然,目標機器上還是要有少許輔助程式才能跟本機的偵錯程式connect上,以便通訊。一般來說,只需要copy四個檔案到目標機器上就行了 msvcmon.exe dm.dll tln0t.dll和msdis11...