工作十多年后重新做 Windows 开发,我用 C++20 和 Codex 写了一个轻量级原生框架 MWFL

everettjf 2026-08-23 14:15 1

大家好,最近做了一个原生 Windows 开发框架,叫做 MWFL ( Modern Windows Foundation Layer ),想在这里简单分享一下它的来历。


我刚毕业时做的就是 Windows 桌面程序开发。当时用过 Qt 、MFC ,也用过 WTL 。


如果追求轻量,比如需要把程序放进 U 盘或光盘里直接运行,尽量减少依赖并控制程序体积,当时我通常会选择 WTL ;如果不太在意依赖和安装包大小,则会考虑 MFC 或 Qt 。我也接触过 DuiLib 一类相对轻量的方案,但整体开发体验始终没有特别满意。


后来十多年里,我的工作重心转到了移动端,基本没有再系统地做 Windows 桌面开发。直到最近,工作中又遇到了一些 Windows 开发需求。


重新回头看这个领域,我发现当年的一些问题似乎还在:


直接使用 Win32 API ,代码比较繁琐,需要处理大量窗口消息和样板代码; MFC 、Qt 这样的方案相对完整,但有时又显得偏重; WTL 足够轻量,不过大量宏以及偏传统的编程方式,放在今天来看,代码的可读性和开发体验都还有改进空间。


于是我开始思考:能不能利用 C++20 的一些现代语言特性,在 Win32 之上构建一个更现代、轻量而且容易理解的基础库?


这个项目只面向 Windows ,不考虑跨平台。跨平台有它的价值,但也会带来更多抽象层和复杂度。对我的需求来说,既然目标就是 Windows 10 及以上系统,那保留 Windows 的原生控件、原生行为和系统集成能力,更直接。


最近我和 Codex 反复讨论和迭代,逐渐把这个想法做成了现在的 MWFL 。


#include <mwfl/mwfl.h>

using mwfl::operator""_dip;

class MainWindow final : public mwfl::WindowBase {
public:
void BuildUI() override {
SetTitle(L"Hello, mwfl");

mwfl::ControlHost ui{*this};
ui.Add(message_, L"Native UI, modern C++20.");
ui.Add(close_, L"Close");

SetLayout(mwfl::Column()
.Margin(24_dip).Gap(12_dip)
.Add(message_, mwfl::Auto())
.Add(close_, mwfl::Fixed(36_dip)));
}

private:
mwfl::Label message_;
mwfl::Button close_;
};

MWFL 没有重新绘制一套 UI 。窗口和控件仍然是真实的 HWND ,底层的消息、句柄、样式和返回值也都可以直接访问。它主要使用 C++20 提供一些更现代的封装,例如类型化事件、RAII 资源管理、DPI 感知布局和更明确的对象所有权,同时尽量减少传统 Win32 、MFC 和 WTL 开发中常见的宏与样板代码。


项目现在是第一个公开版本 v0.1.0 ,使用 MIT 协议,面向 Windows 10 及以上系统,支持 x64 和 ARM64 。仓库中有 62 个可以编译运行的示例。我也用它做了几个真实的小工具,包括十六进制编辑器、Markdown 编辑器、SQLite 查看器、PDF 阅读器、文件夹比较工具和启动项管理器等。


如果你需要:



  • 只开发 Windows 桌面应用;

  • 最低兼容 Windows 10 ;

  • 希望使用 C++20 ;

  • 想保留原生 Win32 控件和系统能力;

  • 或者希望让 AI 生成的 Windows 代码更规整、更容易阅读;


可以看看这个项目。


项目地址:


https://github.com/mwfl/mwfl


文档:


https://mwfl.github.io/


业余 AI 项目,欢迎尽情交流。

最新回复 (8)
  • godbuttonFor 08-23 20:41
    1
    为啥不直接 react 如果只是做桌面应用
  • everettjf 楼主 08-23 21:29
    2
    @godbuttonFor 太大了
  • dimwoodxi27 08-23 22:08
    3
    论极致的轻量感觉还得是 vb
  • everettjf 楼主 08-24 00:17
    4
    @dimwoodxi27 确实更古老了
  • mooyo 08-24 01:38
    5
    所以 winui3 是什么地方不能满足要求呢。。。

    2026 年 在 windows 10 上使用 win32 控件
  • everettjf 楼主 08-24 05:33
    6
    @mooyo 还是多个 xaml 文件,总感觉不爽,哈哈
  • yolee599 08-24 08:33
    7
    如果是原生可以考虑一下 wxWidgets ,体积一样很小
  • simonsww 08-24 10:10
    8
    支持这样的项目。但是对于我个人来说,如果要做一个客户端类的产品,我可能还是希望能够支持 Win7 以及 Mac 端。
* 帖子来源V2EX
返回