wxWidgets + Visual Studio 2005 + Windows

本文介绍如何在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博客所有,转载必须得到本站的允许。

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *