自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談無(wú)效化一個(gè)空窗口的后果,你學(xué)會(huì)了嗎?

開(kāi)發(fā) 前端
如果你將 NULL 作為窗口句柄傳遞給 InvalidateRect 函數(shù),則將其視為與早期版本的 Windows 兼容的特殊情況:它使桌面上的所有窗口失效并重新繪制它們。

有時(shí)候,你可能會(huì)注意到這樣一個(gè)現(xiàn)象:桌面上的所有窗口都刷新了自身并產(chǎn)生了閃爍。
導(dǎo)致這個(gè)現(xiàn)象的原因之一是一個(gè)所謂的空句柄窗口 Bug。

如果你研究過(guò) Win32 SDK 編程,則你應(yīng)該比較熟悉這個(gè)函數(shù):InvalidateRect。
調(diào)用這個(gè)函數(shù)可以通知窗口管理器:某個(gè)窗口的內(nèi)容發(fā)生了變化,需要重新繪制了。在這個(gè)函數(shù)中,你還可以傳入一個(gè)矩形坐標(biāo)來(lái)表明你希望將窗口上的哪個(gè)區(qū)域標(biāo)記為無(wú)效。

這通常是在窗口中渲染的數(shù)據(jù)的狀態(tài)發(fā)生了變化,并且你希望窗口使用新數(shù)據(jù)重新繪制時(shí)完成的。

但是,如果你將 NULL 作為窗口句柄傳遞給 InvalidateRect 函數(shù),則將其視為與早期版本的 Windows 兼容的特殊情況:它使桌面上的所有窗口失效并重新繪制它們。

因此,如果你嘗試使窗口無(wú)效,但錯(cuò)誤檢查或計(jì)時(shí)錯(cuò)誤并最終錯(cuò)誤地傳遞了NULL,則結(jié)果將是整個(gè)屏幕閃爍。

更奇怪的是,將 NULL 作為第一個(gè)參數(shù) ValidateRect 傳遞具有使所有窗口無(wú)效的相同行為。(是的,它是“有效化”功能,但它卻執(zhí)行的是無(wú)效化)。這個(gè)行為也是出于相同的兼容性原因考慮。

這是另一個(gè)程序如何依賴(lài)錯(cuò)誤或未文檔化行為的例子,在這種情況下,由于沒(méi)有嚴(yán)格的參數(shù)驗(yàn)證,早期版本的 Windows 處理 NULL 參數(shù)的特殊方式。

修改窗口管理器中的幾乎任何內(nèi)容都增加了很有可能會(huì)有許多程序依賴(lài)于舊行為,也許完全是偶然的,破壞這些程序意味著大公司的憤怒電話,因?yàn)樗麄兊墓S控制軟件停止了工作。那么,最好還是不要亂動(dòng)這些古老的代碼為妙。

總結(jié)

請(qǐng)立即全文搜索你的代碼中的所有 InvalidateRect 調(diào)用,看看第一個(gè)參數(shù)是否為 NULL。
反正我等會(huì)就會(huì)去這樣做。感謝作者給我解答了一個(gè)窗口閃爍的大謎團(tuán)。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-07-14 07:36:46

無(wú)效化窗口函數(shù)

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-02-28 09:07:58

鏈路聚合模式

2022-04-29 08:55:43

前端開(kāi)發(fā)規(guī)范

2021-10-04 09:29:41

對(duì)象池線程池

2023-09-19 08:03:50

rebase?merge

2023-03-26 22:02:53

APMPR監(jiān)控

2024-06-21 08:15:25

2024-06-19 09:47:21

2023-04-27 08:42:50

效果

2023-01-13 16:46:38

CRM系統(tǒng)建設(shè)

2022-11-03 08:16:33

MySQL·窗口函數(shù)

2022-02-08 09:09:45

智能指針C++

2024-04-01 08:13:59

排行榜MySQL持久化

2024-05-30 09:43:00

2022-07-08 09:27:48

CSSIFC模型

2024-02-02 11:03:11

React數(shù)據(jù)Ref

2024-09-26 09:10:08

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺(tái)工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)