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

devtools/2024/10/19 23:39:07/

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.ppmy.cn/devtools/27398.html

相关文章

深度学习之基于TensorFlow框架的手写数字识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 手写数字识别是机器学习领域中的一个经典问题,也是深度学习技术展示其强大能力的一个典型…

RK3588S和ARM阵列服务器在虚拟化云平台的应用

RK3588是瑞芯微2021年底推出的首款高端8nm旗舰芯片,而RK3588S 则是针对消费端市场在RK3588基础上缩减了部分外围接口,CPU、GPU和NPU等主要参数得到了保留,主要应用范围为高端ARM平板、ARM笔电产品,会议平板类、ARM服务器、智能机器…

GORM数据库连接池对接Prometheus

一、背景与介绍 Golang的database/sql包定了关于操作数据库的相关接口,但是没有去做对应数据库的实现。这些实现是预留给开发者或者对应厂商进行实现的。 其中让我比较关注的是Golang的sql包有没有实现连接池pool的机制呢? 毕竟Golang是静态语言,类似J…

试用模方时,系统一直提示“未找到有效配置文件” ,是需要安装3dsmax吗 ?

问题如图 把文件放在认证管理服务安装目录下即可。(注:因平台限制,需要文件的直接后台私信即可哦) 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件…

bash逻辑取反技巧(bool_not函数)

bash函数不支持像其他高级语言一样的高级的返回变量,bash只能返回数值。 bash有bool变量,但是bool操作符号只能存在于[ ... ]、[[ ... ]]等特定语法结构中 举个例子 bash中,想要对bool变量y取反并赋值给变量x ,这样写x!$y是不合…

【git】.gitignore 个人总结

文章目录 1. 简介2. 格式3. 参考1. 文件名2. *.后缀3. ?.后缀4. []5. \6. **7. /8. ! 1. 简介 .gitignore是一个用于指定Git版本控制系统忽略特定文件或文件夹的配置文件。当我们在项目中添加文件并想要将它们纳入到版本控制中时,有时我们也会有一些不希望纳入版本…

延时任务通知服务的设计及实现(二)-- redisson的延迟队列RDelayedQueue

一、接着上文 RDelayedQueue作为redisson封装的一个分布式延迟队列,直接拿来使用还是比较简单的。 本文主要包括以下几部分: 保存至延迟队列(生产者)读取延迟队列(消费者)从延迟队列移除任务 二、rediss…

2023-2024年运动行业报告/方案合集(精选46份)

运动行业报告/方案(精选46份) 2023-2024年 来源:2023-2024年运动行业报告/方案合集(精选46份) 【以下是资料目录】 运动休闲服装品牌半年传播方案【运动服装】【种草传播】运动鞋服品牌春季全国路演设计方案【运动…