本文介绍如何在windows上面,搭建基于visual studio的wxWidgets的开发环境,并且使用此开发环境创建第一个wxWidgets程序。
关于什么是wxWidgets?和为什么要选择wxWidgets?本文将不会涉及,本博客将有另外的文章专门介绍。
下载
首先现在wxWidgets,wxWidgets的官方网站是
http://www.wxWidgets.org
但是由sourceForge.net提供下载
http://sourceforge.net/projects/wxwindows/files/?source=navbar
截止本文撰写日期,官方已经更新到3.0.0版本,且为稳定版,我们选择最新版,最新版下载地址:
http://sourceforge.net/projects/wxwindows/files/3.0.0/wxMSW-3.0.0-Setup.exe/download
本人有试过其他的版本,发现编译通不过,比如2.9.4
下载下来的文件是windows的一个安装包。
安装
安装使用默认安装就可以,默认安装路劲是c盘。
安装过程其实就是把所有的文件拷贝的c过程,你会看到如:
build
docs
include
lib
src
samples
之类的文件夹,我们比较关心的有build,include,lib这几个文件夹,因为将来我们会用到这些文件夹中文件。
build文件夹中包含所有的编译用到工程文件,比如dsw(vc6), vcproj, sln。
include将来我们编写代码的时候,要包含这个文件夹中头文件
lib wxWidgets被成功编译后的静态库和动态库都会被放在这个文件夹
编译wxWidgets
进入
build\msw\
文件夹,你会发现很多的vs的工程文件,根据你手边的vs的版本,进行选择。我手边的是vs2005,因为我选择:
wx_vc8.sln
使用vs2005打开这个文件,它提供4中编译配置
debug ———- debug静态库
release ———- release静态库
DLL_debug ———- debug动态库
DLL_release ———- release动态库
右键选择solution,选择编译整个solution,并不一定一次就全部编译成功,因为wxWidgets的solution的依赖关系并没有设置好,因此导致有些成功,有些失败,没关系,你只要再次编译就可以,如果还有失败的,再次编译,直到所有的编译成功。
编译成功后,静态库生成的文件都会在
C:\wxWidgets-3.0.0\lib\vc_lib
动态库生成的文件都会在
C:\wxWidgets-3.0.0\lib\vc_dll
你会发现生成的文件一些特点,文件名字每个都有一个u,有些文件只差一个d,
u代表unicode
d代表debug,没有d自然就是release了。
配置环境变量,这一步是可选的,如果你没有设置此环境变量,在配置vs工程属性的时候就使用绝对路径。新建一个环境变量,如下
名字:WXWIN
值:C:\wxWidgets-3.0.0
等你成功的完成上面的步骤,接下来,你就可以编译samples文件夹下面的例子程序,如果不出什么意外,你可以成功编译,并运行这些例子程序。
创建第一个wxWidgets程序
打开vs2005,创建一个空的win32程序,记住是win32,不是win32 console程序。
往工程里面添加一个cpp文件,比如叫main.cpp,然后输入下面内容:
#include "wx/wx.h"
class MyApp: public wxApp
{
virtual bool OnInit();
};
class MyFrame: public wxFrame
{
public:
MyFrame(const wxString& title,
const wxPoint& pos, const wxSize& size);
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
};
enum
{
ID_Quit = 1,
ID_About,
};
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Quit, MyFrame::OnQuit)
EVT_MENU(ID_About, MyFrame::OnAbout)
END_EVENT_TABLE()
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame( "Simple string", wxPoint(50,50), wxSize(500,300) );
frame->Show(TRUE);
SetTopWindow(frame);
return TRUE;
}
MyFrame::MyFrame(const wxString& title,
const wxPoint& pos, const wxSize& size)
: wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
wxMenu *menuFile = new wxMenu;
menuFile->Append( ID_About, "&About…" );
menuFile->AppendSeparator();
menuFile->Append( ID_Quit, "E&xit" );
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append( menuFile, "&File" );
SetMenuBar( menuBar );
CreateStatusBar();
SetStatusText( "Welcome!" );
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close(TRUE);
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox("This is a wxWindows simple app", "About", wxOK | wxICON_INFORMATION, this);
}
配置工程
c/c++ -> processors ->processor definitions
debug:
WIN32;_DEBUG;_WINDOWS;__WINDOWS__;__WXMSW__;__WXDEBUG__;WXDEBUG=1;WXUSINGDLL;
release:
NDEBUG,WIN32,_WINDOWS,__WINDOWS__,__WXMSW__,__WIN95__,__WIN32__, WXUSINGDLL
当你选择动态链接库的方式链接wxWidgets,必须定义 WXUSINGDLL, 如果没有这个宏,编译就会出一堆错。
c/c++ ->code generation -> runtime library
debug
Multithread-threaded debug dll
release
Multithread-threaded dll
c/c++ -> general -> Additional Include Directory
debug
$(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswud;
release
$(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;
注意这里我们用到了上文设置的环境变量,如果你没有设置,就是用绝对路径。
Linker -> general -> Additional Library Directory
$(WXWIN)\lib\vc_dll
我们这里选择动态链接,所以使用vc_dll下面的lib文件,如果你选择静态链接则使用
$(WXWIN)\lib\vc_lib
Linker -> input -> additional dependency
debug
wxbase30ud.lib wxbase30ud_xml.lib wxbase30ud_net.lib wxexpatd.lib wxjpegd.lib wxmsw30ud_adv.lib wxmsw30u_aui.lib wxmsw30ud_core.lib wxmsw30ud_gl.lib wxmsw30ud_html.lib wxmsw30ud_media.lib wxmsw30u_propgrid.lib wxmsw30u_qa.lib wxmsw30u_ribbon.lib wxmsw30u_richtext.lib wxmsw30ud_stc.lib wxmsw30ud_webview.lib wxmsw30u_xrc.lib wxpngd.lib wxregexud.lib wxscintillad.lib wxtiffd.lib wxzlibd.lib
release
wxbase30u.lib wxbase30u_xml.lib wxbase30u_net.lib wxexpat.lib wxjpeg.lib wxmsw30u_adv.lib wxmsw30u_aui.lib wxmsw30u_core.lib wxmsw30u_gl.lib wxmsw30u_html.lib wxmsw30u_media.lib wxmsw30u_propgrid.lib wxmsw30u_qa.lib wxmsw30u_ribbon.lib wxmsw30u_richtext.lib wxmsw30u_stc.lib wxmsw30u_webview.lib wxmsw30u_xrc.lib wxpng.lib wxregexu.lib wxscintilla.lib wxtiff.lib wxzlib.lib
现在你可以成功编译工程了,要运行你还需要将
vc_dll目录下面的所有的dll文件复制到你的debug/release目录,dll也是分为debug版和release版,也是以d来区分的。
本文版权归360converter博客所有,转载必须得到本站的允许。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.