前言
本人是C++编程爱好者,但不是职业程序员,由于不长期做开发,每次想写程序的时候,都得重新配置系统,并且之前配置的方法可能早已经忘了,本次看到关于Visual Studio编译和配置wxWidgets的文章,原作者用的非常详尽,实用,故进行参照原文件,进行了改写,把自己的理解和平时遇到的问题也进行了总结,在此感谢原作者的无私奉献。
参考链接:
1、https://zhuanlan.zhihu.com/p/5396267950
2、visual studio编译wxWidgets_visual studio 2022配置wxwidgets-CSDN博客
选择wxWidget的原因
wxWidgets 有什么优点,其实就是基本调用其它系统的原生 GUI,所以生成的程序包很小,运行效率很高,适合轻量级开发,并且可以自由的商用开发使用,不涉及到版权问题。
由于Qt功能很全,版权收紧,这正是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工程。
打开visual studio 2022工程 进入目录wxWidgets-3.3.2\build\msw,选择wx_vc17.sln打开工程。wx_vc18.slnx是vs2026的工程,如果你安装的是vs2026可选择打开wx_vc18.slnx工程。
选择编译内容
打开工程后,会显示如下页面:
点击菜单栏上的生成选择批生成
为了简单操作在这直接点击全选,然后点击生成。
等到完成后,正常情况下是下面这个样子:
有的平台的工具集没装编译会报错,但是能编译出我们需要的就可以了。此处提醒一下,因为新手看到这么多报错的信息,直接就崩溃了,认为编译出错了,实际上由于上面编译时我们选择的是全部,会有一些编译器没有安装,但常用的编译器已经安装了,不影响我们项目的进行,如果想彻底解决报错,两种办法:
(1)在“批生成”中一个个挑,不要点击全选。
(2)安装其编译器。你可以找开 Visual Stuido Install,在里面找到相关的编译器安装即可。
验证库
新建Windows桌面应用程序
现在我们新建一个桌面应用程序,按照如下图操作,选择Windows桌面应用程序,然后点击下一步。
输入项目名称,然后点击创建。
创建好项目后,生成的文件如下:
对应的windows资源文件显示如下:
建wxWidgets框架项目
由于我们要构建wxWidgets框架项目,因此需要先删除新建项目时创建的这些文件,避免造成干扰。
在这里我们需要删除头文件、源文件以及资源文件三个目录。
—
在IDE种完成删除后,页面显示如下:
现在我们还要在文件夹中彻底将这些文件删除:
删除后文件夹内容显示如下:
现在我们新建一个源文件,用来编写wxWidgets框架代码:
输入源文件名称后点击添加
以下是我在wxWidgets官方拷贝的一个简单demo,可以直接拷贝内容到main.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!");
}
配置开发环境 注意:我个人写代码,一般都用日志大法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编译代码,不出意外的话应用页面显示如下: