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

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

背景

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

代码的组织和编写方式,可以参考已有的文章,这里是链接 []https://www.codeproject.com/articles/WinUI3-in-Existing-Win32-Applications](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.vcxprojVC++ 的项目文件,现在需要手工修改。

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

接下来要做的是:

  1. project_winui3.vcxproj 文件中开头的<import project 开头的行,复制到 project_win32.vcxproj 文件的
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

这一行下面。复制完成后的样子是这样的(注意:只是示意,依赖项版本可能会不一致):

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="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.2508310
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dowhileprogramming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值