准备工作##

  • 下载wxWidgets源码包(官网),我用的是3.02版;
  • 安装Visual Studio。我用的是VS 2015 RC;

编译源码##

  1. 解压wxWidgets的源码包,会得到一大堆文件。进入build\msw文件夹,这个文件夹内是专门为Visual Studio提供的工程文件。在里面能找到从VC7到V12的工程文件。但VS 2015应该是VC14。不用在意这些细节,直接打开wx_vc12.sln,挑一个相对最新的。

  2. 打开之后VS会提示项目代码升级,直接确定。然后在解决方案资源管理器中选中所有项目,打开属性页。





    先编译一个Debug版本的,所以配置Debug字符集Unicode。这个选未设置也可以,但一定要保证你的wxWidgets工程的设置和编译源码的设置是一致的。

    编译过程中可能会出现“snprintf重定义”的错误:

fatal error C1189: #error: Macro definition of snprintf conflicts with Standard Library function declaration

这个博客给出了解决方案,即注释掉\src\tiff\libtiff\tif_config.h中的宏 snprintf 的定义:

//#define snprintf _snprintf

再次编译,没有错误。编译出的结果在\lib\vc_lib下。另外\build\msw\vc_mswud下是VS生成的日志文件,挺占空间的,可以删。

Hello World##

开始测试我们编译出的东西能不能用:

  1. 新建一个空白的C++工程。在它的项目属性页里添加一些东西:

    ·配置属性->VC++目录->常规->包含目录 加上

    X:\...\wxWidgets\include

    X:\...\wxWidgets\include\msvc

    ·配置属性->VC++目录->常规->库目录 加上

    X:\...\wxWidgets\lib\vc_lib

    ·配置属性->链接器->输入->附加依赖项 加上

    wxbase30ud.lib wxmsw30ud_core.lib wxmsw30ud_gl.lib winmm.lib comctl32.lib rpcrt4.lib wsock32.lib oleacc.lib

    这一部分的依赖项并不是固定的,按需求来添加。wxbase30ud.lib其中的30表示版本。

  2. 添加一个空白cpp文件,贴上一段从官网上找到的Hello World代码。

  3. 运行结果图

// 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!");
}

VS编译wxWidgets的更多相关文章

  1. MinGW编译wxWidgets中的问题及解决方法

    其实网上wxWidgets编译相关的博文,都没写到关键点上,泛泛而谈——就写了执行几个命令,就万事大吉了! 维基百科上的这个页面讲解了编译中可能遇到的各种问题及解决办法.比较懒,不想翻译.wxWidg ...

  2. vs2008编译wxWidgets 2.8.12

    用vs2008编译wxWidgets 2.8.12 FileZilla客户端源码3.5.3及以上版本依赖wxWidgets 2.8.12或更高版本,因此,编译FileZilla客户端首先需要编译wxW ...

  3. [转]MinGW编译wxWidgets问题

    其实利用MinGW编译wxWidgets是一件挺简单的事情,但是最近在编译的时候遇到一些问题,并找到解决方案,因此在此分享一下个人经验.编译出错的原因是由于安装了MSYS的缘故.   错误信息类似于如 ...

  4. 编译wxWidgets —— windows、vc71、bcc32、MinGW与命令行

    编译wxWidgets —— windows.vc71.bcc32.MinGW与命令行 http://www.diybl.com/course/3_program/vc/vc_js/20071226/ ...

  5. Visual Studio 2015编译wxWidgets

    宫指导说,换帅如换刀 程序员的编译器一换,基本套路必须都重练几次 使用wxWidgets并不难,但不能使用现有的库和工程配置文件,细节就必须理清楚 获取wxWidgets 官方的下载页面,下7z或zi ...

  6. 关于在windows下使用mingw并行编译wxwidgets时的错误

    清理用的命令:mingw32-make -j4 -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1 clean 2>nul ...

  7. 编译wxWidgets

    打开x64 Native Tools Command Prompt for VS 2017 cd wxWidgets-2.9.5\build\msw nmake -f makefile.vc TARG ...

  8. wxWidgets编译安装gtk问题的解决办法

    下面是google到的一篇博文.我在centos5.3中想安装amule,结果编译时,提示没找到wxWidgets退出了.只好又去下了wxWidgets,还是源码,需要编译.编译中出现和下面这位网友一 ...

  9. (转)wxWidgets 2.9.2svn(3.x)最小体积编译方法

    官方论坛.网上记录的wxWidgets编译方法,会导致编译后的程序库非常大,原因在于对编译的方法选择不当.下面简单总结一下如何编译最新的SVN代码.下载最新源码(每日构建):http://biolpc ...

随机推荐

  1. Android与js交互实例

    Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true Android(Java)与JavaScript(HTML) ...

  2. Tomcat启动时卡在“INFO: Deploying web application directory ”

    今天在linux上的tomcat部署一个网站时,在刚启动tomcat的时候提示启动成功,然后也能访问成功. 可是第二次启动时虽然没有报错,但无法访问tomcat,查看了catalina.out日志,发 ...

  3. 模拟Vue之数据驱动4

    一.前言 在"模拟Vue之数据驱动3"中,我们实现了为每个对象扩展一个$set方法,用于新增属性使用,这样就可以监听新增的属性了. 当然,数组也是对象,也可以通过$set方法实现新 ...

  4. Mvc分页组件MvcSimplePager代码重构

    1 Mvc分页组件MvcSimplePager代码重构 1.1 Intro 1.2 MvcSimplePager 代码优化 1.3 MvcSimplePager 使用 1.4 End Mvc分页组件M ...

  5. Python第一天——入门Python(2)字符串的简单操作

    数据的操作 字符串的一些常用操作: 1 1 #!/usr/bin/env python 2 # #coding=utf-8 3 # 4 # test='hello world' 5 # print(t ...

  6. SAP CRM 高效调试方法

    调试,是程序开发中的基本技巧.快速定位错误消息在源代码中的位置,对发现和解决程序中的问题有着重要的意义.在SAP CRM中,错误消息通常在前台的Web Client页面中展示,应该怎样定位相关代码的位 ...

  7. 使用Netsil监控Kubernetes上的微服务

    ubernetes是容器编排和调度领域的王者,它击败了竞争对手Docker Swarm和Apache Mesos,开启了闪耀的未来,微服务可以自修复,可以自动扩展,可以跨zone,region甚至跨云 ...

  8. learning english

    distortion 英[dɪ'stɔ:ʃn] 美[dɪˈstɔrʃən]n. 扭曲,变形; 失真,畸变; [心理学] 扭转;[例句]I think it would be a gross disto ...

  9. asp.net如何把一个tostring类型转化为dateTime类型

    Convert.ToDateTime(dr["consult_DealTime"].ToString()).ToString("yyyy-MM-dd"); co ...

  10. 网站URL重写(Java UrlRewrite 的使用)

    现在大部分的网站和商城都会使用到URL重写,接触到这个,也是因为正在做的电子商务商城.URL重写,是将原有的URL采用另一种规则来显示,使得用户方便访问同时也屏蔽一些信息. 在此说下它的好处,在开发过 ...