翻譯《The Old New Thing》- 如何創建一個與屏幕大小相同的窗口,而不會被當作全屏窗口處理?

How can I create a window the size of the screen without it being treated as a fullscreen window? - The Old New Thinghttps://devblogs.microsoft.com/oldnewthing/20250522-00/?p=111211


問題描述

????????任務欄允許全屏窗口覆蓋它。這樣,當你在放映幻燈片或進行演示時,屏幕底部不會顯示任務欄。自動檢測算法在大多數情況下工作得相當好:如果窗口的客戶區覆蓋了整個屏幕,那么它就被認為是全屏窗口。

????????但你可能會發現,任務欄有時會將你的窗口誤認為是全屏窗口,盡管你并不希望如此;或者當你希望窗口被視為全屏時,任務欄卻未能將其識別為全屏。

????????一種你不想讓屏幕大小的窗口被當作全屏窗口的情況是,如果你的窗口試圖對屏幕應用某種效果,比如顯示一個 50% 透明度的黑色窗口以實現暗化效果,就像“查找我的鼠標”PowerToy 所使用的那樣。而一種你希望強制將屏幕大小的窗口當作全屏窗口的情況是,如果你的窗口有標題欄,因為標題欄是非客戶區,而全屏計算只考慮客戶區。

????????你有兩種方法可以影響這一決策,這兩種方法都在同一頁面上有文檔說明:一種是使用 ITaskbarList2::MarkFullscreenWindow另一種是使用 NonRudeHWND 窗口屬性。

????????這兩種設置在某種程度上是互補的,它們有各自適用的場合。

譯注

MarkFullscreenWindowNonRudeHWND 這兩種設置在功能上是相互補充的,但它們的作用方向是相反的:

  • MarkFullscreenWindow

    • 作用:當你調用 MarkFullscreenWindow 并傳遞 TRUE 時,明確地告訴任務欄“這個窗口是全屏窗口”。任務欄會根據這個聲明將窗口視為全屏,并相應地隱藏任務欄。

    • 這個設置傾向于讓任務欄將窗口識別為全屏窗口。

    • 例子:如果你有一個帶有標題欄的全屏窗口,任務欄可能會因為標題欄的存在而不將其視為全屏窗口。通過調用 MarkFullscreenWindow(TRUE),你可以強制任務欄將窗口視為全屏。

  • NonRudeHWND

    • 作用:當你設置 NonRudeHWND 屬性為 1 時,你明確地告訴任務欄“這個窗口不是全屏窗口”。任務欄會根據這個聲明將窗口視為非全屏,并相應地顯示任務欄。

    • 這個設置傾向于讓任務欄將窗口識別為非全屏窗口。

    • 例子:如果你有一個覆蓋整個屏幕的窗口,但你希望任務欄仍然可見(比如為了顯示某些狀態信息),通過設置 NonRudeHWND 屬性為 1,你可以強制任務欄將窗口視為非全屏。

舉個例子

  • 場景1:你有一個全屏窗口,但任務欄沒有將其識別為全屏窗口(可能是因為窗口的某些非客戶區部分導致任務欄誤判)。

    • 解決方案:調用 MarkFullscreenWindow(TRUE),明確告訴任務欄這個窗口是全屏的。

  • 場景2:你有一個覆蓋整個屏幕的窗口,但你希望任務欄仍然可見(比如為了顯示某些狀態信息)。

    • 解決方案:設置 NonRudeHWND 屬性為 1,明確告訴任務欄這個窗口不是全屏的。

????????如果你向 ITaskbarList2::MarkFullscreenWindow 傳遞 TRUE,那么你就是在聲明你的窗口是一個全屏窗口。1 如果你傳遞 FALSE,那么你就是在取消這一聲明。注意,傳遞 FALSE 并不意味著“我聲明這不是一個全屏窗口”。相反,它的意思是“我沒有聲明這是一個全屏窗口”。

????????你可以在顯示窗口之前調用 MarkFullscreenWindow,也可以在窗口已經顯示的情況下調用它,這種情況下它會立即生效。然而,一旦你隱藏了窗口,你應用的任何設置都會丟失。如果你想讓它在窗口下一次顯示時繼續生效,你需要再次設置它。如果資源管理器崩潰,標記也會丟失,因此要監聽 TaskbarCreated 消息并重新應用你的標記。

????????當窗口顯示時,或者當系統檢測到你的窗口可能是一個全屏窗口時(比如當它改變大小以覆蓋屏幕時),會咨詢 NonRudeHWND 屬性。在決策做出后更改該值,直到系統需要做出新的決策之前都不會有任何效果,比如如果你隱藏你的窗口然后再顯示它。如果 NonRudeHWND 屬性被設置為 1,那么你就是在聲明你的窗口肯定不是一個全屏窗口。移除該屬性并不會強制你的窗口被當作全屏窗口;相反,它的意思是“繼續你正常的全屏檢測邏輯”。

? ? ? ? 各種情況總結如下:

MarkFullscreenWindowNonRudeHWND
設置后的效果窗口被視為全屏窗口被視為非全屏
最佳調用時機在顯示或調整窗口大小之前
調用頻率每次顯示窗口時一次即可
如果在窗口可見時更改生效無事發生
如果 TaskbarCreated需要再次調用不需要

1 窗口仍然必須滿足一些基本標準,比如,你知道的,窗口需要實際上覆蓋了屏幕(窗口的客戶區(client area)必須覆蓋整個屏幕。換句話說,窗口的大小和位置必須使得它看起來像是一個全屏窗口)。你不能創建一個小小的 1×1 窗口并宣稱“我是一個全屏窗口!”

好吧,你非要也可以,反正別人會嘲笑你。🤪

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87345.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87345.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87345.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深分頁末日救星:MySQL延遲關聯原理與實戰手冊

MySQL 深分頁(如 LIMIT 100000, 10)本質是 高代價的偏移量掃描,可通過以下方案優化,附核心原理和實操示例: 一、深分頁為什么慢? SELECT * FROM orders ORDER BY id DESC LIMIT 100000, 10; 執行過程&…

前端技術棧 —— HTML、CSS和JavaScirpt執行環境

以下內容由GLM回答生成,不保證正確性。 前端技術棧 —— HTML、CSS和JavaScirpt執行環境 JavaScript 的執行環境HTML 和 CSS 的執行環境HTML 和 CSS 是否可以在其他環境中執行?總結 JavaScript 是一種 解釋型語言,但它也可以被編譯。JavaScr…

多項式帶余除法——線性代數題目為例

一、多項式帶余除法的定義 二、例題 使用方法將在例題中展示:

學習日記-spring-day40-7.3

知識點: 1.自動裝配Resource(3) 知識點 核心內容 重點 Autowired與Resource注入規則 默認注入邏輯:未指定參數時,Resource優先按屬性名匹配(by name),失敗后按類型匹配&#xf…

重新認識JNIEnv

引言 拋開一堆概念,我們從本質出發。 java 調用c 我們開發移動端或者后端服務 ,都是用的java 或者kotlin 語言。有時候我們需要用c的一些庫(ocr識別/導航的算法/ 等) 因為一些跟硬件相關的接口或者系統的api 都是c寫的。 C調用J…

人工智能訓練師——智能語音識別ASR

人機對話——ASR 概念 ASR(Automatic Speech Recognition,自動語音識別)是一種將人類語音轉換為文本的技術。它使得計算機能夠“聽”懂人類的語音指令或對話,并將其轉換成可讀、可編輯的文本形式。ASR技術是人機交互領域中的一個…

Compose 常用命令詳解——AI教你學Docker

3.3 Compose 常用命令詳解 Docker Compose 通過一系列命令高效管理多容器應用。理解這些命令,可以讓你靈活地啟動、停止、查看、調試、擴縮容和配置 Compose 項目。 一、核心命令詳解 1. docker compose up 功能:啟動并構建所有服務,生成網…

Mausezahn - 網絡流量生成與測試工具(支持從鏈路層到應用層的協議模擬)

Mausezahn 是一個 網絡流量生成與測試工具,主要用于模擬各種網絡協議行為、測試網絡設備性能、驗證安全策略或進行故障排查。它支持從底層鏈路層(如 Ethernet、VLAN)到高層應用層(如 HTTP、DNS)的協議模擬,…

08-three.js Textures

Three.js Journey — Learn WebGL with Three.jsThe ultimate Three.js course whether you are a beginner or a more advanced developerhttps://threejs-journey.com/?c=p3 使用原生 JavaScript 首先是靜態頁面的放置位置,如果使用Vite模版配置,可以直接放在 /static/ …

git 倉庫取消合并的分支

要取消 Git 倉庫中某次特定的分支合并(例如第一次合并),同時保留其他分支的合并,需要通過 Git 的版本控制功能來操作。以下是具體的步驟和方法,假設你想撤銷某次合并(例如某個提交),并確保其他合并不受影響: 背景假設 你有一個 Git 倉庫,主分支(例如 main)上已經合…

【從歷史數據分析英特爾該如何擺脫困境】

與大多數其他分析師不同,自2013年以來,筆者就一直在積極強調英特爾未來將遭遇冰山,最終我們預測英特爾將在試圖執行其之前的戰略時破產。盡管我們更愿意采用與英特爾不同的代工廠方法(即與臺積電成立合資企業)&#xf…

【PyTorch】PyTorch中張量(Tensor)微分操作

PyTorch深度學習總結 第六章 PyTorch中張量(Tensor)微分操作 文章目錄 PyTorch深度學習總結前言一、torch.autograd模塊二、主要功能和使用方法1. 張量的 requires_grad 屬性2. backward() 方法3. torch.no_grad() 上下文管理器三、函數總結前言 上文介紹了PyTorch中張量(Ten…

Rust 項目實戰:Flappy Bird 游戲

Rust 項目實戰:Flappy Bird 游戲 Rust 項目實戰:Flappy Bird 游戲理解 Game loop開發庫:bracket-libbracket-terminalCodepage 437導入 bracket-lib 創建游戲游戲的模式添加玩家添加障礙最終效果項目源碼 Rust 項目實戰:Flappy Bi…

Gin 中間件詳解與實踐

一、中間件的核心概念 定義 中間件是Web開發中非常重要的概念,它可以在請求到達最終處理函數之前或響應返回客戶端之前執行一系列操作。Gin 框架支持自定義和使用內置的中間件,讓你在請求到達路由處理函數前進行一系列預處理操作。 它是介于請求與響應處…

非接觸式DIC測量系統:助力汽車研發與測試的創新技術應用

近年來,隨著新能源汽車品牌的快速崛起,新車發布的節奏加快,層出不窮的新產品,給消費者帶來了全新的使用體驗。與此同時,變革的產品體驗也讓一些過往的汽車測試和評價標準變得不再適用,尤其是與過往燃油車型…

FOC學習筆記(7)鎖相環(PLL)原理及其在電機控制中的應用

1. 鎖相環(PLL)概述 鎖相環(Phase-Locked Loop, PLL)是一種閉環控制系統,用于使輸出信號的相位與輸入參考信號的相位同步。PLL廣泛應用于通信、電機控制、頻率合成、時鐘恢復等領域。在電機無傳感器控制(Sensorless Control&…

鴻蒙自定義相機的拍照頁面

1、權限申請 "requestPermissions": [{"name": "ohos.permission.CAMERA","reason": "$string:reason_camera","usedScene": {"abilities": ["EntryAbility"]}},{"name": "oh…

greenplum7.2并行備份及恢復

1.并行備份 pg_dump -Fd --gp-syntax -U gpadmin -p 5432 -h 172.19.0.2 -d postgres -j 4 -f /opt/greenplum/data/postgres_backup_$(date %Y-%m-%d) 參數 含義 -Fd 使用 directory 格式(支持并行) --gp-syntax 使用 Greenplum 特定語法(…

備賽2025年初中古詩文大會:練習歷年真題,吃透知識點(0703)

初中古詩文大會的比賽內容古詩詞、文言文各占比50%左右,從歷年的比賽來看,中考語文的古詩文部分(35分)涉及到的古詩詞、文言文知識點都在初中古詩文大會中考過。這些知識點掌握了,對于將來高中、高考也有直接的幫助。 …

BRAKER:真核微生物cds和蛋白注釋

https://github.com/Gaius-Augustus/BRAKER 安裝 # 第一次打開會pull這個docker docker run --user 1000:100 --rm -it teambraker/braker3:latest bash bash /opt/BRAKER/example/docker-tests/test3.sh braker.gtf:BRAKER 的最終基因集。 braker.codingseq&am…