win32gui模块详解(win32api模块)

win32gui模块详解(win32api模块)众所周知 UWP 使用的窗口模型是 CoreWindow 但是 UWP 本身只是一个应用模型 所以完全可以创建 win32 窗口 那么我们可以不可以创建一个 win32 窗口 然后像 XAML 岛 XAML Islands 一样把 XAML 托管上去呢 本篇将讲述如何利用 WAS Windows App SDK 俗称 WinUI3 在 UWP 创建一个 XAML 岛窗口 演示视频

大家好,我是讯享网,很高兴认识大家。



众所周知,UWP 使用的窗口模型是 CoreWindow,但是 UWP 本身只是一个应用模型,所以完全可以创建 win32 窗口,那么我们可以不可以创建一个 win32 窗口,然后像 XAML 岛 (XAML Islands) 一样把 XAML 托管上去呢?本篇将讲述如何利用 WAS (Windows App SDK,俗称 WinUI3) 在 UWP 创建一个 XAML 岛窗口。

示例
讯享网

演示视频:https://x.com/wherewhere7/status/

由于 WAS 在 win32 应用模型下本身就是个 XAML 岛,所以 WAS 对 XAML 岛的支持要比 WUXC (Windows.UI.Xaml.Controls) 要好多了,接下来的内容大多是将 WAS 中实现窗口的方法迁移到 C#。

首先,不管是 WUXC 还是 WAS 的 XAML 岛都会判断当前的应用模型是否为,所以我们需要利用劫持方法。具体内容如下:

准备工作完成,接下来我们就可以创建窗口了,如果顺利的话我们只需要就行了,但是很遗憾,经过测试在 UWP 并不能正常初始化这个类,有可能是我使用的方法不太正确,或许以后可能能找到正常使用的办法,不过现在我们只能去手动创建一个 Win32 窗口了。

首先我们需要新创建一个线程,CoreWindow 线程无法新建 XAML 岛,不过在 XAML 岛线程可以,新建线程只需要用就行了。

WAS 提供了来管理 win32 窗口,我们只需要使用它创建一个窗口就行了。

接下来我们需要创建 XAML 岛,这时我们就需要利用上面劫持器来劫持获取应用模型的方法了。

然后我们就可以把 XAML 岛糊到之前创建的 AppWindow 上了。

由于 XAML 岛存在的一些特性,当窗口扩展标题栏或者全屏化的时候窗口内容并不会跟着变化,所以我们需要一些小魔法来让它在变化时调整大小。

最后不要忘了保持当前线程,不然这里跑完了窗口就退出了。

当窗口关闭后记得执行来释放保持的线程。

最后把之前的东西组合起来,再加点东西:

其中是用来存放和的类,如果不嫌麻烦的话可以包裹成一个和一样的东西。

最后附上示例应用:https://github.com/wherewhere/CoreAppUWP/tree/muxc

小讯
上一篇 2025-06-03 16:50
下一篇 2025-06-07 08:24

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/174674.html