目录
前言
https://zhuanlan.zhihu.com/p/5396267950,如果这篇文章被CSDN弄成收费的了,后面看不了的话,可以直接看开头的那个链接,我也是参照那篇文章弄的。
选择wxWidget的原因
由于Qt版权收紧,为避免纠纷我需要切换其他商业免费的UI框架。目前我从事的是嵌入式linux应用开发,使用LVGL和AWTK比较多,但是在桌面端开发这两个UI框架并不是那么适合。wxWidgets拥有像Qt那样的事件回调且使用C++编写,能满足我的使用需求。
编译环境
操作系统:windows10
开发工具:visual studio 2022
代码版本:wxWidgets-3.3.2
源码下载
源码下载地址为https://wxwidgets.org/downloads/,打开页面后,点击Windows ZIP 即可下载。如果你的下载速度比较慢,那就考虑翻一下墙。

编译源码
解压文件
下载后得到一个zip文件名为wxWidgets-3.3.2.zip ,在电脑上解压后显示如下目录:

打开visual studio 2022工程
进入目录wxWidgets-3.3.2\build\msw ,选择wx_vc17.sln 打开工程。wx_vc18.slnx 是vs2026的工程,如果你安装的是vs2026可选择打开wx_vc18.slnx 工程。

选择编译内容
打开工程后,会显示如下页面:

点击菜单栏上的生成 选择批生成

为了简单操作在这直接点击全选,然后点击生成。有的平台的工具集没装编译会报错,但是能编译出我们需要的就可以了。

验证库
新建Windows桌面应用程序
现在我们新建一个桌面应用程序,按照如下图操作,选择Windows桌面应用程 序,然后点击下一步。

输入项目名称,然后点击创建 。

创建好项目后,生成的文件如下:

对应的windows资源文件显示如下:

构建wxWidgets框架项目
由于我们要构建wxWidgets框架项目,因此需要先删除新建项目时创建的这些文件,避免造成干扰。
在这里我们需要删除头文件 、源文件 以及资源文件 三个目录。

在IDE种完成删除后,页面显示如下:

现在我们还要在文件夹中彻底将这些文件删除:

删除后文件夹内容显示如下:

现在我们新建一个源文件,用来编写wxWidgets框架代码:

输入源文件名称后点击添加:

最后得到如下文件:

以下是我让豆包生成的一个简单demo,可以直接拷贝内容到main.cpp中:
cpp
#include <wx/wx.h>
// 定义应用程序类,继承自wxApp
class MyApp : public wxApp
{
public:
// 程序入口函数,必须重写
virtual bool OnInit();
};
// 定义主窗口类,继承自wxFrame
class MyFrame : public wxFrame
{
public:
// 构造函数:创建窗口
MyFrame(const wxString& title);
private:
// 菜单事件处理函数
void OnExit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
// 声明事件表(wxWidgets的事件处理机制)
wxDECLARE_EVENT_TABLE();
};
// 事件类型定义(用于绑定事件)
enum
{
ID_About = 1, // 关于菜单ID
ID_Exit // 退出菜单ID
};
// 实现事件表
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Exit, MyFrame::OnExit) // 绑定退出菜单事件
EVT_MENU(ID_About, MyFrame::OnAbout) // 绑定关于菜单事件
wxEND_EVENT_TABLE()
// 实现应用程序初始化函数
bool MyApp::OnInit()
{
// 创建主窗口:标题为"wxWidgets最简应用",位置(50,50),大小(400,300)
MyFrame* frame = new MyFrame("wxWidgets最简应用");
frame->Show(true); // 显示窗口
return true; // 返回true表示初始化成功
}
// 实现主窗口构造函数
MyFrame::MyFrame(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxPoint(50, 50), wxSize(400, 300))
{
// 创建菜单栏
wxMenu* menuFile = new wxMenu;
menuFile->Append(ID_About, "关于(&A)...", "显示关于对话框");
menuFile->AppendSeparator();
menuFile->Append(ID_Exit, "退出(&X)", "退出程序");
// 创建菜单条并添加菜单
wxMenuBar* menuBar = new wxMenuBar;
menuBar->Append(menuFile, "文件(&F)");
SetMenuBar(menuBar);
// 创建状态栏
CreateStatusBar();
SetStatusText("欢迎使用wxWidgets!");
}
// 退出事件处理
void MyFrame::OnExit(wxCommandEvent& event)
{
Close(true); // 关闭窗口
}
// 关于事件处理
void MyFrame::OnAbout(wxCommandEvent& event)
{
// 显示关于对话框
wxMessageBox("这是wxWidgets最简应用示例\n"
"单个main.cpp文件实现完整窗口程序",
"关于", wxOK | wxICON_INFORMATION);
}
// 声明应用程序入口(wxWidgets宏)
wxIMPLEMENT_APP(MyApp);
配置开发环境
注意:我个人写代码,一般都用日志大法debug,因此我配置的属性都是Release 版的,如果你用的是Debug 版的注意做区分。
打开属性页面,如下图所示:


设置附加包含目录
添加如下两个目录:
1.wxWidgets-3.3.2\include
2.wxWidgets-3.3.2\include\msvc

设置附加库目录
添加如下目录:
1.wxWidgets-3.3.2\lib\vc_x64_lib

检查链接器系统设置
由于我们创建的是windows桌面应用,因此链接器->系统->子系统应该选择的是窗口 。

点击"应用"->"确定",然后按Ctrl + F5编译代码,不出意外的话应用页面显示如下:
