从wxWidgets的官方网站(http://www.wxwidgets.org/downloads/)下载wxWidgets的windows版本wsMSW版本的,下载之后,解压缩安装。
打开安装wxWidgets的目录即($(wxWidgetsinstallpath)代表wxWidgets的安装目录),在安装目录找到build目录,然后在build目录下找到msw目录,打开msw目录,用vs2005打开wx.dsw文件。这个时候会提示是否转换,如图-1所示:
选择Yes To All选项。
wxWidgets编译的版本主要有静态库和动态库,而动态库和静态库中又分为Unicode码的和ANSII码的。下面来介绍一下静态库的ANSII码版本的。选择编译版本为Debug版本的,然后进行编译。wx.dsw中有20个工程,当20个工程编译完成之后,这个时候会在安装目录下的lib目录下生成vc_lib目录,vc_lib目录下有刚才编译生成的库文件。
打开vs 2005,选择Tools->Options,选择Projects and Solutions选项,
在Show directories for选项中选择Include files
加入头文件的路径
$(wxWidgetsinstallpath)\lib\vc_lib\mswd
$(wxWidgetsinstallpath)\include
在Show directories for选项中选择Library files
加入库文件的路径
$(wxWidgetsinstallpath)\lib\vc_lib
建立一个空的win32 application工程(一定要是application工程哦,不可以是Console工程)。
然后在该工程中添加一个头文件wx_pch.h,内容如下
#pragma once
#if(defined(USE_PCH) && !defined(WX_PRECOMP))
#defineWX_PRECOMP
#endif// USE_PCH
#include <wx/wxprec.h>
#ifdef __BORLANDC__
#pragmahdrstop
#endif
#include <wx/wx.h>
#include <wx/dc.h>
#include <wx/listctrl.h>
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <wx/srchctrl.h>
#include <wx/statline.h>
#include <wx/choice.h>
#include <wx/radiobut.h>
#include <wx/dynarray.h>
#include <wx/grid.h>
#include <wx/aui/aui.h>
#include <wx/splitter.h>
#include <wx/msw/setup.h>
#ifndef WX_PRECOMP
#include<wx/wx.h>
#endif
#ifdef USE_PCH
#endif// USE_PCH
接着进行添加一个类CBaseApp类,然后修改CBaseApp类,让它继承wxApp类。然后在CBaseApp类中添加虚函数virtualbool OnInit(),
BaseApp.h
#pragma once
#include "wx_pch.h"
#include "MainFrame.h"
class CBaseApp:publicwxApp
{
public:
CBaseApp(void);
public:
virtual ~CBaseApp(void);
virtualbool OnInit();
virtualvoid ExitMainLoop();
//主框架的指针
CMainFrame*m_pMainWnd;
};
IMPLEMENT_APP(CBaseApp)
DECLARE_APP(CBaseApp)
接着添加一个CMainFrame类,该类继承wxFrame,其代码如下
MainFrame.h
bool CBaseApp::OnInit()
{
wxStringstrTitle = wxT("应用程序窗口");
if (NULL ==m_pMainWnd)
{
m_pMainWnd =new CMainFrame(strTitle);
}
m_pMainWnd->Centre();
m_pMainWnd->Show();
returntrue;
}
BaseApp.cpp
#include "BaseApp.h"
CBaseApp::CBaseApp(void):
m_pMainWnd(NULL)
{
}
CBaseApp::~CBaseApp(void)
{
}
void CBaseApp::ExitMainLoop()
{
if (NULL !=m_pMainWnd)
{
deletem_pMainWnd;
m_pMainWnd =NULL;
}
}
bool CBaseApp::OnInit()
{
wxStringstrTitle = wxT("应用程序窗口");
if (NULL ==m_pMainWnd)
{
m_pMainWnd =new CMainFrame(strTitle);
}
m_pMainWnd->Centre();
m_pMainWnd->Show();
returntrue;
}
MainFrame.cpp
#include "MainFrame.h"
BEGIN_EVENT_TABLE(CMainFrame,wxFrame)
END_EVENT_TABLE()
CMainFrame::CMainFrame(constwxString&strtitle):
wxFrame(NULL,wxID_ANY,strtitle)
{
//设置显示图标
LoadAppIcon();
}
CMainFrame::~CMainFrame(void)
{
}
void CMainFrame::LoadAppIcon(void)
{
wxIconIcon;
//图片的路径
wxStringIconPath = wxT("D:\\Icon.ico");
//如果加载成功则设置图标
if (Icon.LoadFile(IconPath,wxBITMAP_TYPE_ICO))
{
SetIcon(Icon);
}
}
接下来打开工程属性
ConfigurationProperties->General
选择字节编码为多字节编码
接下来设置
ConfigurationProperties->C++->Preprocessor
在Preprocessor Definitions中输入
WIN32;_DEBUG;_WINDOWS;__WXMSW__;__WXDEBUG__;_MBCS;NOPCH
在Configuration Properties->Linker->Input
中的Additional Dependencies中输入
wxmsw28d_xrc.libwxmsw28d_html.lib wxmsw28d_adv.lib wxmsw28d_core.lib wxbase28d_xml.lib wxbase28d.libwxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexd.lib wxexpatd.lib winmm.libshell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.libwsock32.lib odbc32.lib
当输入完成之后,大功告成啦,你就可以编译程序了,祝你成功。
-----------------------------------------------------------------------------------------------------------
需要注意字符集的选择,工程的字符集必須跟调用的wx库的字符集一致,不然在link时出现找不到相关函数的错误.
在项目->配置属性->常 规->字符集中进行设置.
-----------------------------------------------------------------------------------------------------------
如果出现
无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
这样的错误,则:
1.进入project->setting->c/c++, 在category中选择preprocessor,在processor definitions中删除_CONSOLE, 添加_WINDOWS
2.进入 project->setting->Link, 在Project options中将 /subsystem:console改为/subsystem:windows.
-----------------------------------------------------------------------------------------------------------