跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

在 C++ Win32 项目中使用 WinUI3 窗口

如何在现有的 C++ Win32 项目中集成 WinUI3 窗口,这是一种比完全迁移到 WinUI3 项目成本更低的方案。主要步骤包括创建 WinUI3 和 Win32 项目,参考前者配置文件修改后者,手动添加必要的 Import 语句以引入 WinUI3 依赖项,并使用 NuGet 管理这些依赖以便后续升级。文中提供了具体的 .vcxproj 文件修改示例。

leon发布于 2026/3/25更新于 2026/7/2357 浏览

在 C++ Win32 项目中使用 WinUI3 窗口

背景

在已有的 Windows 图形界面程序中,引入现代的 WinUI3 窗口,相比把所有代码迁移到 WinUI3 项目中,是一个成本较低的改进体验方案。

代码的组织和编写方式,可以参考已有的文章:https://www.codeproject.com/articles/WinUI3-in-Existing-Win32-Applications。

然而,上面外国人写的这篇文章里,很多需要作的工作并没有提到,有以下几点:

  1. 怎么在 Win32 项目中引入 WinUI3 依赖项;添加了依赖项,才能让 C++ 编译器和链接器正确找到 WinUI3 头文件和库文件;
  2. 怎么让 NuGet 管理引入的依赖项;让 NuGet 管理依赖项后,方便使用 NuGet 升级依赖项。

如果是用 VC++ 创建的 WinUI3 项目,上面两个工作会自动在创建项目时完成,不需手工做。然而在 Win32 项目中,需手工做。

操作步骤

在 C++ Win32 项目中引入 WinUI3 依赖项
  1. 创建一个 C++ 的'空白应用,已打包(桌面版中的 WinUI3)'项目,如下图所示,假设其名字是 project_winui3;
  2. 接下来,再创建一个 C++ Windows 桌面程序,假设其名字是 project_win32。

上面两步,应该比较容易,不是重点。

project_winui3.vcxproj 里有完整的 WinUI3 依赖配置,现在要做的是,根据 project_winui3.vcxproj,修改 project_win32.vcxproj。.vcxproj 是 VC++ 的项目文件,现在需要手工修改。

用你熟悉的编辑器,分别打开 project_winui3.vcxproj 和 project_win32.vcxproj。

接下来要做的是:

  1. 把 project_winui3.vcxproj 文件中开头的以 <Import Project 开头的行,复制到 project_win32.vcxproj 文件的 <ProjectDefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 这一行下面。复制完成后的样子是这样的(注意:只是示意,依赖项版本可能会不一致):
<?xml version="1.0" encoding="utf-8"?><ProjectDefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><Import Project="..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.7463\build\Microsoft.Windows.SDK.BuildTools.props" Condition="Exists('..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.7463\build\Microsoft.Windows.SDK.BuildTools.props')"/><Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.250303.1\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.250303.1\build\native\Microsoft.Windows.CppWinRT.props')"/>
<Import Project="..\packages\Microsoft.WindowsAppSDK.1.8.251106002\build\native\Microsoft.WindowsAppSDK.props" Condition="Exists('..\packages\Microsoft.WindowsAppSDK.1.8.251106002\build\native\Microsoft.WindowsAppSDK.props')"/>
<Import Project="..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.251105000\build\native\Microsoft.WindowsAppSDK.WinUI.props" Condition="Exists('..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.251105000\build\native\Microsoft.WindowsAppSDK.WinUI.props')"/>
<Import Project="..\packages\Microsoft.WindowsAppSDK.Widgets.1.8.250904007\build\native\Microsoft.WindowsAppSDK.Widgets.props" Condition="Exists('..\packages\Microsoft.WindowsAppSDK.Widgets.1.8.250904007\build\native\Microsoft.WindowsAppSDK.Widgets.props')"/>
<Import Project="..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.251106002\build\native\Microsoft.WindowsAppSDK.Runtime.props" Condition="Exists('..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.251106002\build\native\Microsoft.WindowsAppSDK.Runtime.props')"/>
<Import Project="..\packages\Microsoft.WindowsAppSDK.ML.1.8.2109\build\native\Microsoft.WindowsAppSDK.ML.props" Condition="Exists('..\packages\Microsoft.WindowsAppSDK.ML.1.8.2109\build\native\Microsoft.WindowsAppSDK.ML.props')"/>
<Import Project="..\packages\Microsoft.WindowsAppSDK.AI.1.8.39\build\native\Microsoft.WindowsAppSDK.AI.props" Condition="Exists('..\packages\Microsoft.WindowsAppSDK.AI.1.8.39\build\native\Microsoft.WindowsAppSDK.AI.props')"/>
<Import Project="..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.251104000\build\native\Microsoft.WindowsAppSDK.Foundation.props" Condition="Exists('..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.251104000\build\native\Microsoft.WindowsAppSDK.Foundation.props')"/>
<Import Project="..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.251104001\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.props" Condition="Exists('..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.251104001\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.props')"/>
<Import Project="..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.props" Condition="Exists('..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.props')"/>
<Import Project="..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.props" Condition="Exists('..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.props')"/>

目录

  1. 在 C++ Win32 项目中使用 WinUI3 窗口
  2. 背景
  3. 操作步骤
  4. 在 C++ Win32 项目中引入 WinUI3 依赖项
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 大模型核心组件解析:激活函数与 FFN 块详解
  • GESP 2025 年 12 月 C++ 五级认证真题解析(单选 1-15)
  • 龙年 AI 生成封面图片玩法与变现指南
  • AMD 显卡部署 ComfyUI-Zluda 实战指南
  • C++ 红黑树封装笔记:从泛型复用看 Map 与 Set 的实现
  • Spring Data JPA 原理与实战:Repository 接口机制详解
  • 使用 C++ 构建简单的 RTSP 流媒体转发服务器
  • Lychee-Rerank 在统信 UOS 与申威 CPU 环境下的部署适配
  • 理解与预防 ChatGPT 中的常见误解
  • Meta-Llama-3-8B 智能对话系统搭建与性能实测
  • 腿式机器人 IMU 融合与状态估计实战
  • Docker 部署 OpenClaw:Web UI 访问、飞书配对及模型配置
  • OpenClaw QQ 机器人接入完整指南
  • 基于 WebTop 与 Tailscale 的云端 OpenClaw 真实浏览器部署方案
  • 人工智能时代的产品经理:挑战、机遇与转型路径
  • 复旦微 FMQL45T900 ARM+FPGA 开发环境搭建指南
  • C++ 标准库 reverse 函数详解
  • 专业人士如何利用大模型重塑工作流程
  • VSCode Copilot 登录失败常见原因与排查方案
  • 中国最容易和最难被 GPT 替代的职业 TOP25 分析

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online