Visual Studio 版本:15.8.1
wxWidgets 版本: 3.1.1
- Step 1. File -> New -> Project -> Windows Destop Application
创建默认的Windows窗口应用,自动生成$app.cpp文件,$app为创建工程的Name - Step 2. 拷贝下述代码,覆盖Step 1生成的cpp文件
- Step 3. Project -> $app Proterties -> C/C++ -> Precompiled Headers -> Precomplied Header
修改为Not Using Precompiled Headers
,关闭stdafx.h
预编译头文件 - Step 4. Project -> $app Proterties -> C/C++ -> Additional Include Directories
增加$wxWidgetsPath\include
$wxWidgetsPath为安装wxWidgets的根目录路径 - Step 5. Project -> $app Proterties -> Linker -> General -> Additional Library Directories
增加$wxWidgetsPath\lib\vc_lib
-
Step 6. Project -> $app Proterties -> Linker -> Input -> Additional Dependencies
按照实际依赖需求,增加lib文件,本教程添加如下(部分可能为冗余lib文件)wxmsw31ud_adv.lib wxmsw31ud_core.lib wxbase31ud.lib wxbase31ud_net.lib wxmsw31ud_html.lib wxbase31ud_xml.lib wxmsw31ud_aui.lib wxmsw31ud_gl.lib wxmsw31ud_media.lib wxmsw31ud_propgrid.lib wxmsw31ud_qa.lib wxmsw31ud_ribbon.lib wxmsw31ud_richtext.lib wxmsw31ud_stc.lib wxmsw31ud_xrc.lib wxscintillad.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxexpatd.lib winmm.lib comctl32.lib rpcrt4.lib wsock32.lib odbc32.lib
上述配置可以选定VS2017配置为Debug或Release,具体应用Build时候选择相应的配置模式即可。切记要选择wxWidgets编译时候相应的系统位数(32位),即VS2017的x86。64位(x64)暂未成功
配置完毕以后,可以成功Build或Debug,并看到wxWidgets的Hello World程序。
成功编译的截图:
wxWidgets: 官方“Hello World"教程
#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);
// 应用的Init事件句柄
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!");
}
// Exit事件句柄
void MyFrame::OnExit(wxCommandEvent& event)
{
Close(true);
}
// About事件句柄
void MyFrame::OnAbout(wxCommandEvent& event)
{
wxMessageBox("This is a wxWidgets' Hello world sample",
"About Hello World", wxOK | wxICON_INFORMATION);
}
// Hello事件句柄
void MyFrame::OnHello(wxCommandEvent& event)
{
wxLogMessage("Hello world from wxWidgets!");
}