0. 介绍
wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI和其它工具。目前的3.0.0版本支持所有版本的Windows、带GTK+或Motif的Unix和MacOS。wxWidgets在不同平台上使用Native API完成GUI相关工作,所以性能和最终App的体积都比Qt好很多。经过十多年的发展,其稳定性、兼容性和相关文档都已日臻完善。在前几年其开发文档曾遭受诟病,但最新的3.0.0所带文档已相当完整。
1. 下载
下载地址:http://www.wxwidgets.org/downloads/
此处我们下载Windows安装版。
2. 编译
安装完成后,使用VS20xx打开安装目录下的build/msw/xxx.sln文件。建议把每个configuration都build一次。
注:据文档称,如果一次编译不能全部通过,可能是子项目编译顺序引起的问题,只要再编译一到两次就可以了。在我的VS2012上一次编译通过。
3. 编译完成后,让我们来做一个带窗口的最小程序。
新建一个vc++空项目;
添加五个文件:
MyFrame.cpp MyFrame.h (窗口Frame类,继承于wxFrame,将被MyApp实例化)
MyApp.cpp MyApp.h (应用程序类,继承于wxApp,在OnInit成员函数中实例化MyFrame,将被main.cpp实例化)
main.cpp (主文件,实例化MyApp)
4. 工程包含目录中添加wxWidget安装目录下的include和include/msw
5. 工程lib目录附加wxWidget安装目录下的lib/vc_lib
6. 增加预处理_UNICODE
7. MyFrame.h
#ifndef MYFRAME_H #define MYFRAME_H #include <wx/wx.h> class MyFrame : public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); }; #endif // MYFRAME_H
8. MyFrame.cpp
#include "MyFrame.h" // 代码想当简短,只是调用基类构造函数 MyFrame :: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(NULL, wxID_ANY, title, pos, size) { }
9. MyApp.h
#ifndef MYAPP_H #define MYAPP_H #include <wx/wx.h> class MyApp : public wxApp { public: // 我们需要重新实现基类虚函数 virtual bool OnInit(); }; #endif // MYAPP_H
10. MyApp.cpp
#include "MyApp.h" #include "MyFrame.h" bool MyApp :: OnInit() { // 实例化窗口框架类 MyFrame *myFrame = new MyFrame("MyApp", wxDefaultPosition, wxDefaultSize); myFrame->Show(); return true; }
11. main.cpp
#include <wx/wx.h> #include "MyApp.h" #include "MyFrame.h" // 核心代码只需一行 wxIMPLEMENT_APP(MyApp);
12. 没什么问题的话,编译会顺利完成,运行后显示一个空窗口。
13. 附加说明:wxApp::OnInit()相当于main函数,可以把它看作整个程序的入口。
14. 结语
早期的wxWidgets编程风格类似于MFC,其消息处理使用DECLARE_EVENT/BEGIN_EVENT_TABLE/END_EVENT_TABLE实现。新的wxWidgets可以像Qt的connect函数那样,使用bind函数完成消息和处理函数的动态绑定。应该说,wxWidgets正走在逐渐完美的路上。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架