看看 丝路花雨的[推荐] VC++预处理定义中的WINVER= 0x400, STRICT是干吗的
A tutorial for wxWindows 2 在这一页有ZIP和PDF教程文档下载
教程和资源:
http://www.bzzt.net/~wxwidgets/icpp_wx1.html
wyoGuide http://wyoguide.sourceforge.net/
http://sourceforge.net/projects/wxwindows
Jabber Clients Development Team http://www.cllrnet.ca/~ahmed1980/wxwindows/wxwindows.htm
在这个站点上的一个比较好的简洁的安装教程(For VC)[推荐]: Compiling wxWindows applications in the VC++ IDE:
wxWindows 程序编译选项设置统揽
下面我会写的罗嗦一点,我之所以罗嗦,是因为我注定要成为大师级的人物~呵呵~首先,得确保你的wxWindows 已经安装好了,并且把你的wxWindows编译出了相应的lib和dll文件.
然后,把你的wxWindows安装目录添加到环境变量中去,以便于VC查找头文件和链接库和以及dll.
比如你的安装目录是C:/Program Files/wxWindows242,就在环境变量中添加一个变量: WXWIN=C:/Program Files/wxWindows242
在XP中是这样设置的:
我的电脑>>属性>>高级选项卡>>环境变量,然后在用户变量中新建一个变量,
变量名: WXWIN
变量值: C:/Program Files/wxWindows242
接着,在VC中包含头文件和库文件的路径
Tools>>Options>>Directories选项卡,
Show Directories for选Include files,然后在Directories一栏添加目录C:/Program Files/wxWindows242/include
Show Directories for选Library files,然后在Directories一栏添加目录C:/Program Files/wxWindows242/lib
--------------------
当然,你如果愿意在
Show Directories for选Source files,然后在Directories一栏添加目录C:/Program Files/wxWindows242/src
也是可以的.
接着,对于每一个新建的Project,按照你需要编译发行的版本来进行VC中的设置Project>>Settings.(或者按Alt+ F7)
注意,由于我们使用wxWindows,所以,不需要使用MFC,因此,下面的设置中,无论是你想发行哪个版本,在工程设置对话框中(Project Settings),General 选项卡中,都选择Not Using MFC.
如果你想使用wxWIndows和MFC混合编程,我在另外的文章中再详细叙述.
下面根据网上文章和wxWindows给的实际例子(以官方例子为准),以及我个人的编译实践,介绍一下需要添加的编译配置--这个说的是你做好了上面的说的设置环境变量(下面就要用的),包含头文件和库文件路径的事情,然后使用AppWizard在除了wxWindows安装目录的Samples目录之外的目录(比如E:/ Test 下)添加了一个Win32 Application,建立一个空的工程(Empty Project),添加了一个main.cpp(文件名随你自己定了)之后,进行的设置(Settings).
注:如果你在wxWindows安装目录下面的Samples目录下建立了一个工程,那么,你按照官方例子(Samples目录下的例子)进行设置就一定行的,我试过,Ctrl+C,Ctrl+V,OK.
编译版本目录
发行版本
Debug
Debug Unicode
Debug DLL
Debug Unicode DLL
Release
Release Unicode
Release DLL
Release Unicode DLL
编译调试Debug版(Win32 Debug)<<请认真阅读,这个写的也比较详细,其他的编译版本与这个很类似
General选项卡
默认吧^_^
C/C++选项卡
- 分类(Category)下拉框中选定General, 在PreProcessor difinitions 中添加: WIN32,_DEBUG,_WINDOWS,WINVER=0x400,_MT,wxUSE_GUI=1,__WXDEBUG__,WXDEBUG=1
- 分类下拉框中选定PreProcessor, 在Additional include directories 中添加:
$(WXWIN)/lib/mswd
注,因为你编译的是Debug版本,并且不使用DLL,而Debug版的必须包含debug版的setup.h,它位于$(WXWIN)/lib/ mswd 目录下的wx/setup.h,虽然在这个wx子目录下面,但是包含到mswd目录就可以了.
$(WXWIN)是指前面在用户环境变量中注册的变量,在我这里是代表C:/Program Files/wxWindows242目录.使用它,主要是减少输入量,每次输入C:/Program Files/wxWindows242多累啊,这个在后面的配置中就不敷述了.
注意:
这个setup.h 在每种发行版本中都是不一样的(主要是里面有些配置开关不一样,当然具体是不是这样的,我没有看每一个setup.h),分别处于不同的目录,如下表
发行版本 Setup.h包含路径(其实在wx/下) Debug $(WXWIN)/lib/mswd Debug Unicode $(WXWIN)/lib/mswud Debug DLL $(WXWIN)/lib/mswdlld Debug Unicode DLL $(WXWIN)/lib/mswdllud Release $(WXWIN)/lib/msw Release Unicode $(WXWIN)/lib/mswu Release DLL $(WXWIN)/lib/mswdll Release Unicode DLL $(WXWIN)/lib/mswdllu - 分类下拉框中选定PreCompiled Headers, 选择Not using precompiled headers 或者 Automatic use of precompiled headers (推荐,毕竟VC的IDE支持预编译头文件).
至于Use precompiled header file(.pch) ,through header: $(WXWIN)/include/wx/wx.h,我倒没有试过,大家可以自己试试,我自己用的是Automatic use of precompiled headers.
另外,有的外国网站上说千万不要使用Create precompiled header file(.pch)这个选项,因为可能造成windows的崩溃(Crash),我试过那么一次,觉得好像没有那么严重. - 分类下拉框中选定Code Generation , 在Use run-time library 中选择Debug Multithreaded DLL (调试版Debug用的,发行版Release用Multithreaded DLL,至于为什么要选 (Debug)Multithreaded DLL,是因为wxWindows 是使用Multithreaded DLL编译的)
- 分类下拉框中选定General,Object/library modules 中原有的lib是
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib,
我们需要添加的是 comctl32.lib rpcrt4.lib wsock32.lib wxmswd.lib,对于最后一个wxmswd.lib,有下表说明
发行版本 额外添加的wxWindows库(library) Debug wxmswd.lib Debug Unicode wxmswud.lib Debug DLL wxmsw24d.lib(8.3格式,我的是2.4.2版本) Debug Unicode DLL wxmsw24ud.lib(8.3格式?我晕,有变化~!) Release wxmsw.lib Release Unicode wxmswu.lib Release DLL wxmsw24.lib Release Unicode DLL wxmsw24u.lib
另外,如果你需要处理图像,可以再添加pngd.lib jpegd.lib tiffd.lib (这些是调试版的,调试版的lib有XXXd.lib的形式,发行版Release的用的是XXX.lib),如果你想使用正则表达式, 添加regexd.lib,使用zip功能,添加zlibd.lib.
处理图像,注意参看sample目录下的image例子.
还有一个比较重要而且比较先进的是,如果你使用wxWindows的专用XML资源文件(.xrc文件)你还必须包含wxxrc.lib(这个库,你要另外编译src目录下的相关工程),这些在后面的配置中就不敷述了. - 分类下拉框中选定Input,在Ignore libraries 中添加libcd.lib
- 在 Additional resource include directories 中添加$(WXWIN)/include ,注意这一步不是必须的,可以不用设置.
但是当你需要使用wxWindows特定格式的XML格式的资源文件(rc)的时候,应该注意把$(WXWIN) /contrib/include目录包含进来
编译发行版(Win32 Release)
General选项卡
默认吧^_^
C/C++选项卡
- 分类下拉框中选定General, 在PreProcessor difinitions 中添加: NDEBUG,WIN32,_WINDOWS,WINVER=0x400,_MT,wxUSE_GUI=1
- 分类下拉框中选定PreProcessor, 在Additional include directories 中添加:
$(WXWIN)/lib/msw
注,因为你编译的是Release版本,并且不使用DLL,而Release版的必须包含Release版的setup.h,它位于$(WXWIN)/ lib/ msw 目录下的wx/setup.h,虽然在这个wx子目录下面,但是包含到msw目录就可以了. - 分类下拉框中选定PreCompiled Headers, 选择Not using precompiled headers 或者 Automatic use of precompiled headers (推荐).
- 分类下拉框中选定Code Generation , 在Use run-time library 中选择Multithreaded DLL(Release版用这个).
- 分类下拉框中选定General,Object/library modules 中原有的lib是
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib,
我们需要添加的是 comctl32.lib rpcrt4.lib wsock32.lib wxmsw.lib,对于最后一个wxmsw.lib,在上面有说明
另外,如果你需要处理图像,可以再添加png.lib jpeg.lib tiff.lib (这些是发行版Release用的),如果你想使用正则表达式, 添加reged.lib,使用zip功能,添加zlid.lib
还有一个比较重要而且比较先进的是,如果你使用wxWindows的专用XML资源文件(.xrc文件)你还必须包含wxxrc.lib(这个库,你要另外编译src目录下的相关工程),这些在后面的配置中就不敷述了. - 分类下拉框中选定Input,在Ignore libraries 中添加libc.lib,注意和Debug版本比较一下,debug忽略的是libcd.lib
在 Additional resource include directories 中添加$(WXWIN)/include ,注意这一步不是必须的,可以不用设置.
但是当你需要使用wxWindows特定格式的XML格式的资源文件(rc)的时候,应该注意把$(WXWIN) /contrib/include目录包含进来
编译发行Release DLL版(Win32 Release DLL)
首先你的确保你把 wxmsw24ud.dll wxmsw24.dll wxmsw24u.dll wxmsw24d.dll这几个文件(在lib目录下)复制到你的Windows/System32/目录下去,免得程序运行的时候,弹出找不到 XXX.dll的错误.
另外这里说一点闲话,对比MFC的dll(比如MFC42.dll),这几个dll的大小是它的几倍,MFC42.dll只有900多KB,而上面这几个 dll,都是2~4MB
你可能还不知道怎么编译Win32 Release DLL版本,因为编译器默认的只有Win32 Debug 版和Win32 Release 版.这里告诉你步骤: Build>>Config>>弹出configurations对话框>>单击Add按钮>>弹出 Add Project configuration对话框>>在Configuration中输入 Release DLL>>在Copy Settings From中选择XXX-Win32 Release(你如果是Win32 Debug DLL,就从XXX-Win32 Debug复制配置)>>单击OK,成功!
General选项卡
默认吧^_^
C/C++选项卡
- 分类下拉框中选定General, 在PreProcessor difinitions 中添加: NDEBUG,WIN32,_WINDOWS,WINVER=0x400,_MT,wxUSE_GUI=1,WXUSINGDLL=1
- 分类下拉框中选定PreProcessor, 在Additional include directories 中添加:
$(WXWIN)/lib/mswdll
注,因为你编译的是Release版本,并且使用了DLL,而Release DLL版的必须包含Release DLL版的setup.h,它位于$(WXWIN)/ lib/ mswdll 目录下的wx/setup.h,虽然在这个wx子目录下面,但是包含到mswdll目录就可以了. - 分类下拉框中选定PreCompiled Headers, 选择Not using precompiled headers 或者 Automatic use of precompiled headers (推荐).
- 分类下拉框中选定Code Generation , 在Use run-time library 中选择Multithreaded DLL(Release版用这个).
- 分类下拉框中选定General,Object/library modules 中原有的lib是
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib,
我们需要添加的是 comctl32.lib rpcrt4.lib wsock32.lib wxmsw24.lib ,对于最后一个wxmsw24.lib ,在上面有说明 - 分类下拉框中选定Input,在Ignore libraries 中添加libc.lib,注意和Debug版本比较一下,debug忽略的是libcd.lib
在 Additional resource include directories 中添加$(WXWIN)/include ,注意这一步不是必须的,可以不用设置.
但是当你需要使用wxWindows特定格式的XML格式的资源文件(rc)的时候,应该注意把$(WXWIN) /contrib/include目录包含进来
编译调试Debug DLL版(Win32 Debug DLL) 和上面的类似,NDEBUG改为_DEBUG,相应的改动包含的lib文件.
编译发行Release Unicode版(Win32 Release Unicode)
General选项卡
默认吧^_^
C/C++选项卡
- 分类下拉框中选定General, 在PreProcessor difinitions 中添加: NDEBUG,WIN32,_WINDOWS,WINVER=0x400,_MT,wxUSE_GUI=1,_UNICOEDE,UNICODE
- 分类下拉框中选定PreProcessor, 在Additional include directories 中添加:
$(WXWIN)/lib/mswu
注,因为你编译的是Release Unicode版本,并且不使用DLL,而Release版的必须包含Release版的setup.h,它位于$(WXWIN)/ lib/ mswu目录下的wx/setup.h,虽然在这个wx子目录下面,但是包含到mswu目录就可以了. - 分类下拉框中选定PreCompiled Headers, 选择Not using precompiled headers 或者 Automatic use of precompiled headers (推荐).
- 分类下拉框中选定Code Generation , 在Use run-time library 中选择Multithreaded DLL(Release版用这个).
- 分类下拉框中选定General, Object/library modules 中原有的lib是
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib,
我们需要添加的是 comctl32.lib rpcrt4.lib wsock32.lib wxmswu.lib,对于最后一个wxmswu.lib,在上面有说明 - 分类下拉框中选定Input,在Ignore libraries 中添加libc.lib,注意和Debug版本比较一下,debug忽略的是libcd.lib
在 Additional resource include directories 中添加$(WXWIN)/include ,注意这一步不是必须的,可以不用设置.
但是当你需要使用wxWindows特定格式的XML格式的资源文件(rc)的时候,应该注意把$(WXWIN) /contrib/include目录包含进来
编译调试Debug Unicode版(Win32 Debug Unicode) 和上面的类似,NDEBUG改为_DEBUG,相应的改动包含的lib文件.
编译发行Release Unicode DLL版(Win32 Release Unicode DLL)
General选项卡
默认吧^_^
C/C++选项卡
- 分类下拉框中选定General, 在PreProcessor difinitions 中添加: NDEBUG,WIN32,_WINDOWS,WINVER=0x400,_MT,wxUSE_GUI=1,WXUSINGDLL=1,_UNICOEDE,UNICODE,
- 分类下拉框中选定PreProcessor, 在Additional include directories 中添加:
$(WXWIN)/lib/mswdllu
注,因为你编译的是Release Unicode版本,并且使用DLL,而Release Unicode版的必须包含Release Unicode版的setup.h,它位于$(WXWIN)/ lib/ mswdllu 目录下的wx/setup.h,虽然在这个wx子目录下面,但是包含到mswdllu 目录就可以了. - 分类下拉框中选定PreCompiled Headers, 选择Not using precompiled headers 或者 Automatic use of precompiled headers (推荐).
- 分类下拉框中选定Code Generation , 在Use run-time library 中选择Multithreaded DLL(Release版用这个).
- 分类下拉框中选定General,Object/library modules 中原有的lib是
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib,
我们需要添加的是 comctl32.lib rpcrt4.lib wsock32.lib wxmsw.lib,对于最后一个wxmsw.lib,在上面有说明
另外,如果你需要处理图像,可以再添加png.lib jpeg.lib tiff.lib (这些是发行版Release用的),如果你想使用正则表达式, 添加reged.lib,使用zip功能,添加zlid.lib
还有一个比较重要而且比较先进的是,如果你使用wxWindows的专用XML资源文件(.xrc文件)你还必须包含wxxrc.lib(这个库,你要另外编译src目录下的相关工程),这些在后面的配置中就不敷述了. - 分类下拉框中选定Input,在Ignore libraries 中添加libc.lib,注意和Debug版本比较一下,debug忽略的是libcd.lib
在 Additional resource include directories 中添加$(WXWIN)/include ,注意这一步不是必须的,可以不用设置.
但是当你需要使用wxWindows特定格式的XML格式的资源文件(rc)的时候,应该注意把$(WXWIN) /contrib/include目录包含进来
编译调试Debug Unicode DLL版(Win32 Debug Unicode DLL) 和上面的类似,NDEBUG改为_DEBUG,相应的改动包含的lib文件.
不过这里还要强调一点的是,所有的Unicode版的,加入 _UNICODE 和 UNICODE 我没有试过,如果谁试过就给我指出错误来,在此谢过.
有一点参考资料写在最上面了.
结语: 祝大家好运,鸡年大吉!
huyoo于2005年4月1日,好像是愚人节咯~
联系我,请发邮件至 huyoo353{at}126{dot}com