visual studio编译wxWidgets

目录

前言

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编译代码,不出意外的话应用页面显示如下:

相关推荐
Laurence4 小时前
C++ 引入第三方库(一):直接引入源文件
开发语言·c++·第三方库·添加·添加库·添加包·源文件
蒸汽求职5 小时前
机器人软件工程(Robotics SDE):特斯拉Optimus落地引发的嵌入式C++与感知算法人才抢夺战
大数据·c++·算法·职场和发展·机器人·求职招聘·ai-native
charlee445 小时前
最小二乘问题详解17:SFM仿真数据生成
c++·计算机视觉·sfm·数字摄影测量·无人机航测
Tanecious.6 小时前
蓝桥杯备赛:Day4-P9749 公路
c++·蓝桥杯
旖-旎6 小时前
分治(库存管理|||)(4)
c++·算法·leetcode·排序算法·快速选择算法
Tanecious.7 小时前
蓝桥杯备赛:Day3-P1102 A-B 数对
c++·蓝桥杯
Tanecious.7 小时前
蓝桥杯备赛:Day3-P1918 保龄球
c++·蓝桥杯
良木生香7 小时前
【C++初阶】:C++类和对象(下):构造函数promax & 类型转换 & static & 友元 & 内部类 & 匿名对象 & 超级优化
c语言·开发语言·c++
三雷科技8 小时前
使用 `dlopen` 动态加载 `.so` 文件
开发语言·c++·算法
旖-旎9 小时前
分治(快速选择算法)(3)
c++·算法·leetcode·排序算法·快速选择