Visual Studio编译和使用wxWidgets
一、下载
1.进入官网:https://www.wxwidgets.org/
2.官网会引导跳到github:https://github.com/wxWidgets/wxWidgets/releases/tag/v3.2.2
3.github有很多个下载链接,有代码(source)和预编译包(binary)的,后者又分开发版(dev)和发布版(release)
预编译包的VC版本和VS版本对应如下:
* vc14x兼容Visual Studio 2015~2022,例如wxMSW-3.2.2_vc14x_Dev.7z
二、编译
1.运行下载的代码安装包(Setup.exe),例如wxMSW-3.2.2-Setup.exe。安装到C盘以外的盘,例如D:\wxWidgets
* 代码安装包中不包含预编译库,需要自行编译,且编译后约占15G空间,不建议放C盘。
2.进入解决方案目录,例如D:\wxWidgets\build\msw,找到对应的解决方案文件(.sln),版本号查上面表格的"Visual C++版本"
3.用Visual Studio打开.sln后,菜单 -> build -> batch build -> select all -> build
然后等待编译完成(约15~30分钟)
* 这里有2个大坑:
1.别下载解压版的源代码包[Source code(zip)或Source code(tar.gz)],要下载安装包版的源代码包(Setup.exe),否则编译或运行时会报错。
2.貌似wxWidgets还不支持Windows 11 SDK,所以即便是Win11,也要卸载11 SDK,装回10 SDK。
* 一般会报错"The WindowsSDKDir property is not defined"
三、使用
* 根目录仍然是以"D:\wxWidgets"为例。
1.打开Visual Studio,创建新C++的WinForm项目(Windows Desktop Application)
2.右键项目 -> Properties -> ..见下面(1)、(2)、(3)
(1) -> Platform -> 选择"Win32"
(2) -> C/C++ -> Additional Include Directories -> 输入框下拉 -> Edit
在第一个输入框添加2个路径:"D:\wxWidgets\include"、"D:\wxWidgets\include\msvc"
(3) -> Linker -> Additional Library Directories -> 输入框下拉 -> Edit
在第一个输入框添加1个路径:"D:\wxWidgets\lib\vc_lib"
2.删除默认创建的Header Files、Resource Files、Source Files三个目录
3.右键项目 -> Add -> Class -> 创建类(例如,创建Test类)
4.打开Test.cpp文件,输入以下代码:
// Start of wxWidgets "Hello World" Program
#include <wx/wx.h>
class MyApp : public wxApp
{
public:
bool OnInit() override;
};
wxIMPLEMENT_APP(MyApp);
class MyFrame : public wxFrame
{
public:
MyFrame();
private:
void OnHello(wxCommandEvent& event);
void OnExit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
};
enum
{
ID_Hello = 1
};
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame();
frame->Show(true);
return true;
}
MyFrame::MyFrame()
: wxFrame(nullptr, wxID_ANY, "Hello World")
{
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!");
Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);
Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT);
Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT);
}
void MyFrame::OnExit(wxCommandEvent& event)
{
Close(true);
}
void MyFrame::OnAbout(wxCommandEvent& event)
{
wxMessageBox("This is a wxWidgets Hello World example",
"About Hello World", wxOK | wxICON_INFORMATION);
}
void MyFrame::OnHello(wxCommandEvent& event)
{
wxLogMessage("Hello world from wxWidgets!");
}
5.编译运行
* 这里有3个大坑:
1.如果编译时报一大堆错,检查是否没装Windows SDK,或没装对版本(目前最高只支持10 SDK,用11 SDK会报错)
2.如果运行时报错,检查是否32位、64位对不上。包括项目属性配路径,也要先选好32还是64位再进行配置
3.按官网提供的流程,有可能会报错或没反应。以下是官网的流程:
(1) 菜单 -> View -> Other Windows -> Property Manager
(2) 在Property Manager中选择wxwidgets.props文件
* 用32位还是64位,要配置对应一致的地方(要统一配成32位或64位。不要一个地方配32位,其它配64位):
1.右键项目 -> Properties -> Platform -> 32位选Win32,64位选x64
2.右键项目 -> Properties -> Linker -> Additional Library Directories -> 在"\wxWidgets\lib\"目录下,32位选vc_lib,64位选vc_x64_lib
3.在Visual Studio主界面,调试运行按钮(Local Windows Debugger)左边的下拉选择框,32位选x86,64位选x64