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

相关推荐
努力中的编程者2 小时前
哈希表(C语言底层实现)
c语言·数据结构·c++·算法·哈希算法·散列表
mjhcsp2 小时前
C++ 迭代加深搜索(IDDFS):从原理到实战的深度解析
c++·深度优先·迭代加深
摆烂小白敲代码2 小时前
【数据结构与算法】汉诺塔问题(C++)
c语言·开发语言·数据结构·c++·算法·hanoi·汉诺塔问题
Trouvaille ~2 小时前
【递归、搜索与回溯】专题(八):记忆化搜索——从暴力递归到动态规划的桥梁
c++·算法·leetcode·青少年编程·面试·蓝桥杯·动态规划
刚入坑的新人编程2 小时前
C++qt(3)-按钮类控件
开发语言·c++·qt
乐观勇敢坚强的老彭2 小时前
本周C++编程课笔记:for循环练习
java·c++·笔记
娇娇yyyyyy3 小时前
C++ 网络编程(22) beast网络库实现websocket服务器
网络·c++·websocket
西野.xuan3 小时前
【effective c++】条款四十三:学习处理模版化基类内的名称
java·c++·学习
8Qi83 小时前
LeetCode61. 旋转链表
c语言·数据结构·c++·算法·leetcode·链表·力扣