• 请不要在回答技术问题时复制粘贴 AI 生成的内容
everettjf
V2EX  ›  程序员

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

  •  
  •   everettjf ·
    everettjf · 8h 28m ago · 476 views

    大家好,最近做了一个原生 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 项目,欢迎尽情交流。

    3 replies    2026-08-23 22:08:11 +08:00
    godbuttonFor
        1
    godbuttonFor  
       2h 1m ago
    为啥不直接 react 如果只是做桌面应用
    everettjf
        2
    everettjf  
    OP
       1h 13m ago via iPhone
    @godbuttonFor 太大了
    dimwoodxi27
        3
    dimwoodxi27  
       34 mins ago
    论极致的轻量感觉还得是 vb
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2926 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:43 · PVG 22:43 · LAX 07:43 · JFK 10:43
    ♥ Do have faith in what you're doing.