vs2010配置wxWidgets开发环境

**************************************我是一个愚蠢的程序猿******************************

理论搞不懂,编程搞不定。天天穷开心,幻想当个人。

日子一天天过,编程一次次改。话说编程习惯这个东东还是最初养成好,现在

一把年纪被一些坏的编程习惯搞得头都大了。随着年岁的增长,这记忆也跟着

变老,所以只能记录下来喽。

*************************************************************************************************

一、准备wxWidgets

wxWidgetsWindows and X widgets,最早命名为wxWindows[1])是一个开放源代码跨平台对象工具集(widget toolkit),其可用来创建基本的图形用户界面GUI)。wxWidgets由Julian Smart于1992年首先开发。

wxWidgets标榜使用其库所开发的软件只需要对源代码做少量更改(或者完全不用更改),就能在各种不同的作业平台上编译并运行。目前可支持WindowsApple MacintoshLinuxUnix(转译成X11GTK+Motif等库)、OpenVMS、以及OS/2

wxWidgets的官网是http://www.wxwidgets.org/downloads/,其中有各个版本的源代码,有兴趣的话可以自己在网上找找教程进行编译学习。

同时,wxWidgets在SourceForge网站上也挂出了一些预编译好的库等,这是链接http://sourceforge.net/projects/wxwindows/files/2.9.4/binaries/,可以直接下载编译好的lib和dll。wxMSW-2.9.4_vc100_Dev.7z中包含了wx/setup.h头文件,链接库和动态库。wxWidgets-2.9.4_Headers.7z包含了必要的头文件,基本下载这两个文件就可以满足要求了。

二、配置vs2010的wxWidgets开发环境

环境的配置其实和一般的项目环境配置类似,添加头文件目录、库目录和添加链接器。但是这里需要注意的是,最好直接建立一个Windows application项目,这样在后边的测试中会方便一点。

1.新建项目:建议选择Win32 Console Applictaion,然后选择空项目即可。

2.配置头文件目录和库目录:

需要注意的是,在头文件包含目录中需要添加两个目录:wxWidgets-2.9.4-vc100/include 和wxWidgets-2.9.4/lib/vc100_dll/mswu

库目录需要添加wxWidgets-2.9.4-vc100/include 和wxWidgets-2.9.4/lib/vc100_dll。

3.需要进行一些预编译项处理设置:

最为主要的是在属性->c/c++->预处理器->预处理器定义中添加WXUSINGDLL,这是因为使用到了动态链接库,否则在编译的时候会进行报错。报错的类型如下代码:

minimal.obj : error LNK2001: unresolved external symbol "protected: static struct wxEventTable const wxFrame::sm_eventTable" (?sm_eventTable@wxFrame@@1UwxEventTable@@B)
1>minimal.obj : error LNK2001: unresolved external symbol "protected: static class wxAppConsole * wxAppConsoleBase::ms_appInstance" (?ms_appInstance@wxAppConsoleBase@@1PAVwxAppConsole@@A)
1>minimal.obj : error LNK2001: unresolved external symbol "class wxMBConv * wxConvLibcPtr" (?wxConvLibcPtr@@3PAVwxMBConv@@A)
1>minimal.obj : error LNK2001: unresolved external symbol "public: static unsigned int const wxString::npos" (?npos@wxString@@2IB)
1>minimal.obj : error LNK2001: unresolved external symbol "char const * const wxStatusLineNameStr" (?wxStatusLineNameStr@@3QBDB)
1>minimal.obj : error LNK2001: unresolved external symbol "class wxPoint const wxDefaultPosition" (?wxDefaultPosition@@3VwxPoint@@B)
1>minimal.obj : error LNK2001: unresolved external symbol "class wxSize const wxDefaultSize" (?wxDefaultSize@@3VwxSize@@B)
1>minimal.obj : error LNK2001: unresolved external symbol "char const * const wxFrameNameStr" (?wxFrameNameStr@@3QBDB)
1>minimal.obj : error LNK2001: unresolved external symbol "bool const wxFalse" (?wxFalse@@3_NB)
1>minimal.obj : error LNK2001: unresolved external symbol "void (__cdecl* wxTheAssertHandler)(class wxString const &,int,class wxString const &,class wxString const &,class wxString const &)" (?wxTheAssertHandler@@3P6AXABVwxString@@H000@ZA)
1>minimal.obj : error LNK2001: unresolved external symbol "int const wxEVT_NULL" (?wxEVT_NULL@@3HB)
1>minimal.obj : error LNK2001: unresolved external symbol "class wxEventTypeTag<class wxCommandEvent> const wxEVT_COMMAND_MENU_SELECTED" (?wxEVT_COMMAND_MENU_SELECTED@@3V?$wxEventTypeTag@VwxCommandEvent@@@@B)
1>minimal.obj : error LNK2001: unresolved external symbol "protected: static class wxAppConsole * (__cdecl* wxAppConsoleBase::ms_appInitFn)(void)" (?ms_appInitFn@wxAppConsoleBase@@1P6APAVwxAppConsole@@XZA)
1>C:\Users\Nebojsa i Nenad\Documents\Visual Studio 2010\Projects\wxWidgets-Minimal\Debug\wxWidgets-Minimal.exe : fatal error LNK1120: 13 unresolved externals
遇到这种问题的时候,你就得考虑是不是忘了添加上面的预处理定义了。

4.添加链接库

上面已经添加了库目录,这时候需要再向链接器中添加相应的库名,wxWidgets使用的库名有下面这些:

wxmsw29ud_stc.lib
wxmsw29ud_adv.lib
wxmsw29ud_core.lib
wxbase29ud.lib
wxmsw29ud_webview.lib
wxscintillad.lib
wxtiffd.lib
wxjpegd.lib
wxpngd.lib
wxzlibd.lib
wxregexud.lib
wxexpatd.lib
kernel32.lib
user32.lib
gdi32.lib
comdlg32.lib
winspool.lib
winmm.lib
shell32.lib
comctl32.lib
ole32.lib
oleaut32.lib
uuid.lib
rpcrt4.lib
advapi32.lib
wsock32.lib
wininet.lib
上面的这些库名的添加可以根据自己的需要进行刷选,如果觉得麻烦,那就直接拷贝全部粘贴吧。

至此,配置过程就算结束了。下面就可以进行测试了。

三、代码测试
wxWidgets的example文件夹中存放着样例,下面给出一个简单的测试程序:

// wxWidgets "Hello world" Program  
// For compilers that support precompilation, includes "wx/wx.h".  
#include <wx/wxprec.h>  
#ifndef WX_PRECOMP  
#include <wx/wx.h>  
#endif  
class MyApp: public wxApp  
{  
public:  
    virtual bool OnInit();  
};  
class MyFrame: public wxFrame  
{  
public:  
    MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);  
private:  
    void OnHello(wxCommandEvent& event);  
    void OnExit(wxCommandEvent& event);  
    void OnAbout(wxCommandEvent& event);  
    wxDECLARE_EVENT_TABLE();  
};  
enum  
{  
    ID_Hello = 1  
};  
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)  
    EVT_MENU(ID_Hello,   MyFrame::OnHello)  
    EVT_MENU(wxID_EXIT,  MyFrame::OnExit)  
    EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)  
    wxEND_EVENT_TABLE()  
    wxIMPLEMENT_APP(MyApp);  
bool MyApp::OnInit()  
{  
    MyFrame *frame = new MyFrame( "Hello World", wxPoint(50, 50), wxSize(450, 340) );  
    frame->Show( true );  
    return true;  
}  
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)  
    : wxFrame(NULL, wxID_ANY, title, pos, size)  
{  
    wxMenu *menuFile = new wxMenu;  
    menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",  
        "Help string shown in status bar for this menu item");  
    menuFile->AppendSeparator();  
    menuFile->Append(wxID_EXIT);  
    wxMenu *menuHelp = new wxMenu;  
    menuHelp->Append(wxID_ABOUT);  
    wxMenuBar *menuBar = new wxMenuBar;  
    menuBar->Append( menuFile, "&File" );  
    menuBar->Append( menuHelp, "&Help" );  
    SetMenuBar( menuBar );  
    CreateStatusBar();  
    SetStatusText( "Welcome to wxWidgets!" );  
}  
void MyFrame::OnExit(wxCommandEvent& event)  
{  
    Close( true );  
}  
void MyFrame::OnAbout(wxCommandEvent& event)  
{  
    wxMessageBox( "This is a wxWidgets' Hello world sample",  
        "About Hello World", wxOK | wxICON_INFORMATION );  
}  
void MyFrame::OnHello(wxCommandEvent& event)  
{  
    wxLogMessage("Hello world from wxWidgets!");  
}
如果创建项目的时候,选择的是windows application,那么直接编译就可以运行,这样整个环境就搭建起来了。

不过话说回来,还是觉得QT的框架更为明了点。

本文的内容部分借鉴文章http://blog.csdn.net/chenjinxian88/article/details/9060161

你可能感兴趣的:(配置,VS2010,wxwidgets)