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

 

posted @ 2023-04-17 16:39  Clotho_Lee  阅读(2846)  评论(0编辑  收藏  举报