WinUI 3 支持的三种窗口 及 受限的窗口透明

我的目标

希望能够熟悉 WinUI 3 窗口的基本使用方式,了解可能出现的问题 。


WinUI 3 支持三种窗口模式,分别为:常规窗口模式、画中画模式、全屏模式。

窗口模式:常规

即我们最常见的普通窗口。

支持:显示最大化按钮、最小化按钮、关闭按钮、标题栏、手动调整窗口尺寸、代码调整窗口尺寸、模态对话框、条件性支持窗口透明。

=> 窗口设置:

var overlappedPresenter = Microsoft.UI.Windowing.OverlappedPresenter.Create();
AppWindow.SetPresenter(overlappedPresenter);

=> 设置最大化:

 if (AppWindow.Presenter is OverlappedPresenter presenter)
{presenter.IsMaximizable = true;presenter.Maximize();
}

=> 设置最小化:

presenter.IsMinimizable = true;
presenter.Minimize();

=> 设置标题栏:

presenter.SetBorderAndTitleBar(true, true);
Title = "测试标题";

=> 调整窗口尺寸:

AppWindow.Resize(new Windows.Graphics.SizeInt32(320, 240));

=> 模态对话框:

var presenter = Microsoft.UI.Windowing.OverlappedPresenter.CreateForDialog();
var win = new Window();
var mainWindowHandle = WinRT.Interop.WindowNative.GetWindowHandle(this);
var dialogHandle = WinRT.Interop.WindowNative.GetWindowHandle(win);
SetWindowLongPtr(dialogHandle, GWLP_HWNDPARENT, mainWindowHandle);
win.AppWindow.SetPresenter(presenter);
presenter.IsModal = true;
win.Activate();[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong);

=> 窗口透明:

//MainWindow2 是一个透明窗口,具体参见下文
new MainWindow2().AppWindow.Show();


窗口模式:画中画

这与 winform 和 wpf 的 TopMost 比较像,一直显示在上层。

支持:代码调整窗口尺寸、和隐藏标题栏

不支持:显示最大化按钮、最小化按钮、隐藏关闭按钮(可能需要其他比较复杂的方式隐藏)、 模态对话框、窗口透明。


=> 窗口设置:

var compactPresenter = Microsoft.UI.Windowing.CompactOverlayPresenter.Create();
AppWindow.SetPresenter(compactPresenter);

=> 隐藏标题栏:

ExtendsContentIntoTitleBar = true;


窗口模式:全屏

即铺满整个窗口。

支持:模态对话框、条件性支持窗口透明

不支持:显示标题栏、最大化按钮、最小化按钮、关闭按钮、调整窗口尺寸
 

=> 窗口设置:

var fullScreenPresenter = Microsoft.UI.Windowing.FullScreenPresenter.Create();
AppWindow.SetPresenter(fullScreenPresenter);

=> 窗口透明:

//MainWindow2 是一个透明窗口,具体参见下文
new MainWindow2().AppWindow.Show();

=> 模态对话框(变相支持):

var presenter = Microsoft.UI.Windowing.FullScreenPresenter.Create();
var win = new Window(); var mainWindowHandle = WinRT.Interop.WindowNative.GetWindowHandle(this);
var dialogHandle = WinRT.Interop.WindowNative.GetWindowHandle(win);
SetWindowLongPtr(dialogHandle, GWLP_HWNDPARENT, mainWindowHandle);win.AppWindow.SetPresenter(presenter);
win.Activate();

它本身就会占据整个屏幕,不支持真正的模态对话框。所以作为 “变相支持”,效果是类似的。


限制性支持:窗口透明

WinUI 3 默认不支持真正的窗口透明度控制,无法通过简单的属性设置实现窗口透明,
因此找到了一个第三方的实现方式,它的实现控制代码有一万多行: https://github.com/castorix/WinUI3_SwapChainPanel_Layered

它的主要原理是:
SetLayeredWindowAttributes控制透明度 + UpdateLayeredWindow 更新窗口内容  + Direct2D 和 DXGI 硬件加速渲染  + SwapChain双缓冲渲染。

但是,这个透明的效果是有局限性的,仅在指定系统版本有效:

比对效果如下:

在项目属性中,设置为:


因此在使用透明窗口相关功能的时候,一定要非常的谨慎,很有可能开发出来对系统的兼容性非常差。


整体感受

WinUI 3 对窗口的类型进行了更细的分类,与 winform, WPF 相比,功能上差异并不是很大,但是使用起来比它们要麻烦好多;而且,对透明的支持受限制非常多。

因此,如果进行传统的桌面程序开发,我可能仍然会考虑 winform 和 wpf。

期待后续的探索,从这些独特设计的窗口分类中,希望能够看到让我惊艳的特性和性能,才能不负我如此艰辛

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30698.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《云原生监控体系构建实录:从Prometheus到Grafana的观测革命》

PrometheusGrafana部署配置 Prometheus安装 下载Prometheus服务端 Download | PrometheusAn open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.https://prometheus.io/…

VBA 数据库同一表的当前行与其他行的主键重复判断实现方案1

目的,判断是否主键重复,不重复则登录新数据,重复则不登录。 定义类型: DataRecord   tableName 表名   rowNumber 行号   columnName 列名   data 数据 想要实现的代码逻辑如下: 模拟数据库的登录过程。假设…

MySql的in和join对比谁更高效

公司有个SQl根据时间判断是否变化进而更新到主表通知下游服务告知变化 首先看下优化前和优化后的sql: 优化前:执行很慢 UPDATE vrs_video SET updated_at now() WHEREvrs_video.id IN (SELECT DISTINCTvideo_id FROMvrs_play_source WHEREvrs_play_…

用BGE Large ZH 1.5获取向量以及重排序构建生产环境可用restful API的Python代码讲解

开篇 嘿,各位小伙伴!今天我们来聊一个超级有趣的话题:embedding向量化数据。听起来很高大上对不对?别担心,让我用最简单的方式告诉你这是啥。 想象一下,你有一大堆文字、图片或者其他数据,想要…

【OneAPI】网页截图API-V2

API简介 生成指定URL的网页截图或缩略图。 旧版本请参考:网页截图 V2版本新增全屏截图、带壳截图等功能,并修复了一些已知问题。 全屏截图: 支持全屏截图,通过设置fullscreentrue来支持全屏截图。全屏模式下,系统…

1个基于 Three.js 的 Vue3 组件库

大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员👨🏻‍💻,关注我,科技未来或许我能帮到你! Tres.js 是一个基于 Three.js 的 Vue 3 组件库,旨在简…

QT | 信号与槽(超详解)

前言 对qt信号和槽的详细解释 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见📝 🎉欢迎大家点赞&am…

用Deepseek写一个五子棋微信小程序

在当今快节奏的生活中,休闲小游戏成为了许多人放松心情的好选择。五子棋作为一款经典的策略游戏,不仅规则简单,还能锻炼思维。最近,我借助 DeepSeek 的帮助,开发了一款五子棋微信小程序。在这篇文章中,我将…

Qwen2.5-7B-Instruct进行自我认知微调

使用镜像: modelscope/ms-swift/swift_lora_qwen2:v1 数据集和模型下载: 数据集内容: 启动命令: CUDA_VISIBLE_DEVICES0 \ swift sft \ --model Qwen/Qwen2.5-7B-Instruct \ --train_type lora \ --dataset AI-Mod…

百问网提供的烧写工具将各镜像文件烧写到eMMC存储器的各脚本的解析

重要说明:本文的烧写目标存储器是eMMC存储器 百问网提供的烧写工具不仅可以把各镜像文件烧写到eMMC存储器,还可以烧写到NADN,SD卡等存储设备,如下图所示: 但是本文的烧写目标存储器是eMMC存储器,这点是前提&#xff…

android studio开发文档

android基本样式 1.文本 2.设置文本大小 3.字体颜色 背景 资源文件 xml’引用资源文件 4.视图宽高 5.间距 6.对齐方式 常用布局 1.linearLayout线性布局 2.相对布局 RelativeLayout 3.网格布局GridLayout 4.scrollview滚动视图 Button 点击事件与长按事件 长按 按钮禁用与…

Unity Dots

文章目录 什么是DotsDOTS的优势ECS(实体组件系统)Job System作业系统Burst编译器最后 什么是Dots DOTS(Data-Oriented Technology Stack)是Unity推出的一种用于开发高性能游戏和应用的数据导向技术栈,包含三大核心组件…

Flink-DataStreamAPI-执行模式

一、概览 DataStream API支持不同的运行时执行模式,我们可以根据用例的要求和作业的特征进行选择。 STREAMING执行模式:被称为“经典”执行模式为,主要用于需要持续增量处理并且预计无限期保持在线的无界作业BATCH执行模式:类似…

DeepSeek DeepEP学习(三)normal dispatch

上节介绍了normal kernel执行过程中会分成两部分,第一步通过notify_dispatch计算meta信息,然后本节介绍数据dispatch的过程。 notify_dispatch过程中会计算其他所有rank发送给当前rank多少token,写入到host的moe_recv_counter_mapped&#x…

mysql创建数据库和表

登录 MySQL 并选择数据库 登录 MySQL 命令行:mysql -u root -p 查看所有数据库:SHOW DATABASES; 创建数据库:CREATE DATABASE my_database; 查看数据库是否创建成功:SHOW DATABASES; 选择数据库:USE 你的数据库名…

Python 实现图片提取文字

文章目录 一、效果图 二、库安装 三、使用示例 四、完整代码 一、效果图 使用的图片: 返回文字: 二、库安装 pip install easyocr opencv-python numpy 三、使用示例 ocr EasyOCRProcessor() results ocr.extract_text("test.png",&…

根目录下的两个包相互没有import成功

问题1: import models 或者import models.Models不成功 问题2:在项目名称后面出现unnamed的提示 查阅资料,说错误可能是:.idea 文件夹配置缺失或损坏 PyCharm 的项目配置信息(包括名称)存储在 .idea 目录中…

什么样的物联网框架适合开展共享自助KTV唱歌项目?

现在物联网的广泛应用,也让更多用户们看到了它的实力,也使得共享经济遍地开花。其中共享自助唱歌设备也备受欢迎,那么适合开展共享自助KTV唱歌项目的物联网框架都应具备哪些特点呢? 智能化与自动化管理 物联网技术在共享KTV中的应…

《白帽子讲 Web 安全》之深入同源策略(万字详解)

目录 引言 一、同源策略基础认知 (一)定义 (二)作用 (三)作用机制详解 二、同源策略的分类 (一)域名同源策略 (二)协议同源策略 (三&…

【Linux篇】调试器-gdb/cgdb使用

📌 个人主页: 孙同学_ 🔧 文章专栏:Liunx 💡 关注我,分享经验,助你少走弯路! 文章目录 1. 前言2.关于gdb2.1 快速认识gdb2.2 安装cgdb2.3 gdb命令2.4 调试 & 断点 3.常见技巧3.…