翻译《The Old New Thing》 - How do I cover the taskbar with a fullscreen window?

How do I cover the taskbar with a fullscreen window? - The Old New Thing (microsoft.com)icon-default.png?t=N7T8https://devblogs.microsoft.com/oldnewthing/20050505-04/?p=35703

Raymond Chen  2005年5月5日


如何用全屏窗口覆盖任务栏?

        很多时候,人们总是想得太多。如果你想创建一个覆盖任务栏的全屏窗口,只需创建一个全屏窗口,任务栏会自动让路。不要到处寻找任务栏并试图控制它;让任务栏自然地完成其功能。

        一如既往,从我们的 scratch程序 开始,并添加以下代码:

HWND CreateFullscreenWindow(HWND hwnd) {HMONITOR hmon = MonitorFromWindow(hwnd,MONITOR_DEFAULTTONEAREST);MONITORINFO mi = { sizeof(mi) };if (!GetMonitorInfo(hmon, &mi)) return NULL;return CreateWindow(TEXT("static"),TEXT("something interesting might go here"),WS_POPUP | WS_VISIBLE,mi.rcMonitor.left,mi.rcMonitor.top,mi.rcMonitor.right - mi.rcMonitor.left,mi.rcMonitor.bottom - mi.rcMonitor.top,hwnd, NULL, g_hinst, 0);
}void OnChar(HWND hwnd, TCHAR ch, int cRepeat) {if (ch == TEXT(' ')) {CreateFullscreenWindow(hwnd);}
}HANDLE_MSG(hwnd, WM_CHAR, OnChar);

        请注意,本示例程序并未处理销毁全屏窗口的逻辑,或者防止用户创建多个全屏窗口。它仅作为一个示例存在。关键之处在于观察 CreateFullScreenWindow 函数的编写方式。

        我们利用 MonitorFromWindow 函数来确定应该在哪个监视器上实现全屏显示。在多监视器系统中,这可能与任务栏所在的监视器不同。幸运的是,我们无需担心此问题;任务栏自行处理。

        我曾见过有人寻找任务栏窗口,然后对其执行 ShowWindow(hwndTaskbar, SW_HIDE)。这种做法有多种原因但不明智。

        首先,当你评估此类技巧时,应始终进行一个思维练习:“如果两个程序尝试使用此技巧会怎样?”此时,两个程序都认为自己负责隐藏和显示任务栏,且两者之间没有协调。结果是混乱。一个程序隐藏了任务栏,紧接着另一个程序也这样做,然后第一个程序认为它已完成操作因此又显示了任务栏,但第二个程序尚未完成,它预期任务栏应该是隐藏的,却意外地发现任务栏是可见的。

        事情只会由此变得更加糟糕。

        其次,如果你的程序在有机会重新显示任务栏之前崩溃怎么办?任务栏将被永久隐藏,用户不得不注销并重新登录才能恢复任务栏。这显然不够友好。

        第三,如果根本没有任务栏呢?在终端服务器场景中,通常在没有 Explorer 的情况下运行程序。在这种配置下,不存在 Explorer,也没有任务栏。或者你可能会在 Windows 的未来版本上运行程序,届时任务栏可能已被其他机制取代。

        在这些情况下,你的程序将如何应对?

        不要对任务栏进行任何不必要的操作。只需创建你的全屏窗口,让任务栏自动完成其应有的行为。

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

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

相关文章

在Centos7上部署LDAP服务

安装ldap和设置自起 - 安装ldap yum install -y openldap-servers openldap-clients openldap openldap-devel compat-openldap openldap-servers-sql- 启动和开机自起 systemctl start slapd systemctl enable slapd- 查看服务是否安装成功 配置ldap - 创建第一个管理账号…

基于Springboot的音乐翻唱与分享平台

基于SpringbootVue的音乐翻唱与分享平台设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 音乐资讯 音乐翻唱 在线听歌 后台登录 后台首页 用户管理 音乐资讯管理…

【已解决】pandas读excel中长数字变成科学计数法的问题

pandas 读excel中的长数字时,即使excel中已经设置为文本,读进df后也会自动变成科学计数法。 在日常的数据分析和处理工作中,Excel和pandas是数据分析师们不可或缺的得力助手。然而,在使用pandas读取Excel文件时,我们有…

模型剪枝-Network Slimming算法分析

代码见文末 论文地址:Learning Efficient Convolutional Networks through Network Slimming ICCV 2017 Open Access Repository 1.概述 由于边缘设备的限制,在模型的部署中经常受到模型大小、运行内存、计算量的限制。之前的方法要么只能解决其中一个…

Linux基础part-5

1、Linux用户与用户组管理 1、用户是什么? 实现资源分派(区分和管理系统资源的访问权限,将不同的资源分配给不同的用户)实现认证pam和授权(用户身份通常通过用户名和密码进行认证,认证成功后系统将授予用…

Flutter运行项目一直:running gradle task

大体原因就是访问国外的资源由于网络等原因导致访问失败,解决方法就是换成国内的源 修改项目的android/build.gradle 文件,将里面的 google() mavenCentral()替换为 maven {allowInsecureProtocol trueurl https://maven.aliyun.com/repository/googl…

Model3芯片:以太网口+高速USB,传输更便捷!

科技飞速发展,人们的生活节奏也不断加快。在这个加速社会,人们对效率的追求从未改变,需求产生供给,智能设备的应用场景越来越多,人们也越来越依赖于高效、稳定的数据传输和网络连接。所以,无论是在工作中处…

nacos-redis-springboot

新项目 准备工作 nacos 版本 2.0.3 redis 最终版本说明 springcloud-alibaba:2.2.7RELEASE springcloud:Hoxton.SR12 springboot:2.3.12.RELEASE Nacos:2.0.3 步骤 启动nacos和redis 准备nacos配置文件 server: port…

Java Web 开发 - 掌握拦截器和监听器

目录 深入了解Java Web的拦截器和监听器 拦截器(Interceptor) 拦截器的使用场景 拦截器实例 思维导图 ​编辑 监听器(Listener) 监听器的使用场景 监听器类型 监听器实例 思维导图​编辑 总结 深入了解Java Web的拦截器…

AI家居设备的未来:智能家庭的下一个大步

🔒目录 ☂️智能家居设备的发展和AI技术的作用 ❤️AI技术实现智能家居设备的自动化控制和智能化交互的依赖 AI家居设备的未来应用场景 💣智能家庭在未来的发展和应用前景 💥智能家居设备的发展和AI技术的作用 智能家居设备的发展和AI技术的…

Golang | Leetcode Golang题解之第60题排列序列

题目&#xff1a; 题解&#xff1a; func getPermutation(n int, k int) string {factorial : make([]int, n)factorial[0] 1for i : 1; i < n; i {factorial[i] factorial[i - 1] * i}k--ans : ""valid : make([]int, n 1)for i : 0; i < len(valid); i {…

(四)小程序学习笔记——自定义组件

1、组件注册——usingComponents &#xff08;1&#xff09;全局注册&#xff1a;在app.json文件中配置 usingComponents进行注册&#xff0c;注册后可以在任意页面使用。 &#xff08;2&#xff09;局部注册&#xff0c;在页面的json文件中配置suingComponents进行注册&#…