wxWidgets是一个历史悠久、基础雄厚的,可跨多种平台的多功能图形用户界面库。最初它曾被命名wxWindows,它受着Windows的MFC的深远影响,很多概念都和MFC很类似,最初命名的基本含义也就是MFC的移植库,后面为了不让使用者引起“只能在Windows下使用”的歧义,才正式改名为wxWidgets。
1、下载wxWidgets 3.1和vs2012
· 下载wxWidgets源码包(官网),我用的是3.02版;
· 安装Visual Studio。我用的是VS 2012;
下载地址:http://sourceforge.net/projects/wxwindows/files/?source=navbar
我下载的地址是https://github.com/wxWidgets/wxWidgets
下载完以后安装到任意目录下。(其实就相当于解压缩以下,下载的是源代码)
2、编译源码
a、解压wxWidgets的源码包,会得到一大堆文件。进入build\msw
文件夹,这个文件夹内是专门为Visual Studio提供的工程文件。在里面能找到从VC7到V12的工程文件。我用的是VS 2012所以选择的是VC11。
b、开始编译。因为我们下载的是源文件,而要把转化为库文件(如果对库的概念不是很了解可以上网查查)就需要编译挣个解决方案,对于编译时间大家不用担心,非常的快!!!我编译23个项目大概花了3-4分钟的样子。
3、建立测试项目配置项目属性:
首先建立一个Win32空项目或者直接空项目都可以(注意如果建控制台项目后面会报错)。
将下面的测试源代码源代码加入到一个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()
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame( _("Hello World"), wxPoint(50, 50), wxSize(450, 340) );
frame->Show(true);
SetTopWindow(frame);
return true;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: 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 to wxWidgets!") );
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close(true);
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox( _("This is a wxWidgets Hello world sample"),
_("About Hello World"),
wxOK | wxICON_INFORMATION, this );
}
IMPLEMENT_APP(MyApp)
现在编译这个文件显然是通不过的,下面要对编译选项进行配置
4、包含目录:
在项目——属性——VC++目录——附加包含目录下加入wxWidgets库的头文件(此头文件是安装文件夹里的include文件夹)
这样系统就能知道你引用的头文件来自哪里了
5、包含库目录(让系统知道你即将使用的库文件来自哪里。)
项目——属性——VC++目录——库目录在库目录里加入wxWidgets安装文件夹下的lib/vc_lib文件夹
6、使用库。
把项目要用到的lib附加到项目属性中
项目--属性--链接器--输入--附加依赖库项,编辑这里要非常注意!!!
加入库名称:
wxmsw31ud_core.lib
wxbase31ud.lib
wxtiffd.lib
wxjpegd.lib
wxpngd.lib
wxzlibd.lib
wxregexud.lib
wxmsw31ud_adv.lib
wxmsw31ud_html.lib
wxmsw31ud_xrc.lib
wxbase31ud_net.lib
wxbase31ud_xml.lib
wxexpatd.lib
winmm.lib
comctl32.lib
rpcrt4.lib
wsock32.lib
编译运行就出现了如下界面了:
wxWidgets不支持图形界面拖动那种设计方式,所以必须通过绝对位置和相对位置来确定各个控件的布局,故很多前辈推荐使用wxFormBuilder。
/****************************************************************************/
配置中出现的错误:
² “MSVCRTD.lib(crtexe.obj): error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用”
出现这种报错是因为我之前建的是控制台项目,后来换成普通win32项目就好了。
下面两篇博客也有有提到此类错误:
http://blog.youkuaiyun.com/tonykk2008/article/details/8177636
http://www.cnblogs.com/minggoddess/archive/2010/12/15/1907180.html
wxWidgets和其他跨平台开发库比拼的PK图表: