深入理解 LockWindowUpdate: 该函数的作用

news2024/9/28 11:16:26

今天说说被误解的 LockWindowUpdate 。

这是 LockWindowUpdate 系列中的第一篇,我将会讲讲它的作用、用途以及(也许最重要的是)对它的误用。

LockWindowUpdate 的作用非常简单。

当一个窗口被锁定时,所有试图绘制它或其子窗口的尝试都会失败。
窗口管理器不会进行绘制,而是记住应用程序尝试绘制到窗口的哪些部分,当窗口解锁时,这些区域将失效,以便应用程序获得另一条 WM_PAINT 消息,从而使屏幕内容与应用程序认为在屏幕上的内容保持同步。

这种 “跟踪应用程序在条件 X 生效时尝试绘制的内容,并在条件 X 不再成立时使其失效” 的行为,您已经以另一种形式看到:CS_SAVEBITS。

从这个意义上说,LockWindowUpdate 执行的记录工作与用 CS_SAVEBITS 窗口覆盖锁定窗口时发生的工作相同,只是它不保存任何数据位。

MSDN 文档明确指出: 一次只能锁定一个窗口(当然是每个桌面),但函数原型暗示了这一点。
如果可以同时锁定两个窗口,则不可能可靠地使用 LockWindowUpdate。如果这样做会发生什么:

LockWindowUpdate(hwndA); // 锁定窗口 A
LockWindowUpdate(hwndB); // 再锁定窗口 B
LockWindowUpdate(NULL); // 这会发生什么?

对 LockWindowUpdate 的第三次调用有什么作用?

它会解锁所有窗户吗?还是只是窗口 A?还是只是窗口 B?无论您的答案是什么,它都会使以下代码无法可靠地使用 LockWindowUpdate:

>> 请移步至 www.topomel.com 以查看图片 <<

假设 BeginOperation 函数启动了由异步活动触发的某些操作。例如,假设操作 A 正在绘制拖放反馈,因此它在鼠标按下时开始,在释放鼠标时结束。

现在假设操作 B 在拖放仍在进行时完成。
然后 EndOperationB 将清理操作 B 并调用 LockWindowUpdate(NULL)。如果您建议应该解锁所有窗口,那么您刚刚破坏了操作 A,该操作期望 hwndA 仍处于锁定状态。

同样,如果您认为它应该只解锁 hwndA,那么只有操作 A 会被破坏,但操作 B 也会被破坏(因为即使操作完成,hwndB 仍然被锁定)。

另一方面,如果您建议 LockWindowUpdate(NULL) 应解锁 hwndB,则考虑操作 A 首先完成的情况。

如果 LockWindowUpdate 能够一次锁定多个窗口,则必须更改函数原型,以便解锁操作知道正在解锁哪个窗口。

有很多方法可以做到这一点。例如,可以添加新参数或创建单独的函数。

>> 请移步至 www.topomel.com 以查看图片 <<

但事实并非如此。

LockWindowUpdate 函数一次仅锁定一个窗口。当我们了解 LockWindowUpdate 的用途时,其原因将变得更加清晰。

总结

此文献给老是整不明白 LockWindowUpdate 和 RedrawWindow 区别的你(我)。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《What does LockWindowUpdate do?》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

太牛叉了!国产 AI 智能体惊艳问世,全面致敬 FastGPT!

太震撼了&#xff01;太厉害了&#xff01;昆仑万维正式发布了「天工 SkyAgents」平台&#xff0c;助力大模型走入千家万户。你听听&#xff0c;这个名字一听就有一种巧夺天工的感觉&#xff0c;技艺那是相当的高超。 这个平台基于昆仑万维「天工大模型」打造&#xff0c;具备…

豪约客牛排直播间圣诞狂欢,创意云倾力打造节日“氛围感”直播间

12月22日&#xff0c;豪约客牛排开启圣诞节直播专场活动&#xff0c;蓝海创意云vLive虚拟直播系统助力豪约客牛排顺利开播&#xff0c;为本地生活类商家呈现一场高品质的沉浸式直播新体验。vLive虚拟直播系统https://live.vsochina.com/cn 创意云助力豪约客牛排 呈现圣诞氛围感…

VR全景展示的功能有哪些?适合用于哪些领域?

现如今&#xff0c;VR全景展示技术已经逐渐融入了我们的日常生活中&#xff0c;可能大部分人都还没有意识到VR全景是如何应用的&#xff0c;但其实VR全景针对多个行业的垂直领域都有一定的落地使用。在互联网高速发展的今天&#xff0c;多媒体所包含的种类也越来越多&#xff0…

MFC 工具栏

目录 工具栏概述 工具栏的使用 添加工具栏资源 创建&#xff0c;加载工具栏 设置工具栏停靠 工具栏概述 CToolBarCtrl-父类CWnd&#xff0c;封装了关于工具栏控件的各种操作。 CToolBar一父类CControlBar&#xff0c;封装了关于工具栏的操作&#xff0c;以及和框架窗口的…

redis哨兵+redis主从复制(在虚拟机centos的docker下)

1.安装docker Docker安装(CentOS)简单使用-CSDN博客 2.redis主从复制 redis主从复制(在虚拟机centos的docker下)-CSDN博客 3.编辑3个redis配置 cd /etc mkdir redis-sentinel cd redis-sentinel/ wget http://download.redis.io/redis-stable/sentinel.confcp sentinel.co…

2024 年全球顶级的 4 款在线 PDF 转换器服务

想要在2024年全球顶级的PDF转换器服务吗&#xff1f;今天就为大家介绍4款优质的服务。 PDF是一种常用的文件格式&#xff0c;广泛应用于办公、学习和日常生活中。为了方便处理和编辑PDF文件&#xff0c;许多在线PDF转换器应运而生&#xff0c;为广大用户提供了便捷的文件转换服…

直线中点算法

中点算法是基于隐函数方程设计的&#xff0c;使用像素网格中点来判断如何选取距离理想直线最近的像素点&#xff0c;直线的中点算法不仅与 Bresenham 算法产生同样的像素点集&#xff0c;二期还可以推广到圆和椭圆。 原理 直线的隐函数表示 F ( x , y ) y − k x − b 0 F(…

强大的Adobe全家桶软件都是干什么用的,你知道吗?

Adobe Creative Suite是Adobe系统公司出品的一个图形设计、影像编辑与网络开发的软件产品套装。该套装的最高版本是Adobe Creative Cloud。 根据受众市场的不同分为Master Collection(大师版)、Production Premium&#xff08;影音高级版&#xff09;Design&Web Premium&a…

JAVA第一季

第二章 变量和常量 Java中的常用关键字 Java标识符 标识符就是用于给 Java 程序中变量、类、方法等命名的符号。 使用标识符时&#xff0c;需要遵守几条规则&#xff1a; 1. 标识符可以由字母、数字、下划线&#xff08;_&#xff09;、美元符&#xff08;$&#xff09;组成…

微信小程序~如何设置页面的背景色

微信小程序~如何设置页面的背景色 众所周知&#xff0c;微信小程序每个页面由.json&#xff0c;.scss&#xff0c;.ts&#xff0c;.wxml这四个文件组成。 有的小伙伴会发现&#xff0c;需要给页面加背景色的时候&#xff0c;只需在此页面的.scss文件中写个page{background-colo…

kali-钓鱼网站远程代码漏洞分析

文章目录 一、靶场搭建二、开始信息收集&#xff0c;寻找漏洞三、使用蚁剑连接后门程序四、使用webshell查看数据库信息五、进入网站后台 实验环境 Kali CentOs 一、靶场搭建 CentOsIP地址192.168.64.159 #关闭centos防火墙 [rootlocalhost ~]# systemctl disable --now fi…

常用两种Linux命令生成器

在Linux中&#xff0c;可以使用多种命令来生成随机密码。以下是其中两种常用的命令&#xff1a; 1.pwgen&#xff1a;这个命令可以生成随机、无意义的但容易发音的密码。生成的密码可以只包含小写字母、大小写混合或数字。大写字母和数字会以一种便于记忆的方式放置&#xff0…

【办公技巧】ppt如何加密只能看不能修改?

大家是否想要给PPT文件设置加密&#xff0c;让ppt文件变为只能查看不能修改的状态&#xff1f;今天给大家分享给PPT文件设置带有密码的只读模式&#xff08;修改权限&#xff09;。 方法如下&#xff1a; PPT文件之后&#xff0c;将PPT文件进行另存为操作&#xff0c;但是在选…

云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目录 前言&#xff1a;一、云计算1.1 云计算的基本思想1.2 云计算概述——什么是云计算&#xff1f;1.3 云计算的基本特征1.4 云计算的部署模式1.5 云服务1.6 云计算的关键技术——虚拟化技术1.6.1 虚拟化的好处1.6.2 虚拟化技术的应用——12306使用阿里云避免了高峰期的崩…

线上服务有哪些稳定性指标?

在分布式高可用设计中&#xff0c;系统监控非常重要&#xff0c;系统监控做好了&#xff0c;可以提前对异常情况进行报警&#xff0c;避免很多线上故障的产生。系统监控做得好不好&#xff0c;也是评价一家互联网公司基础建设水平的重要标准&#xff0c;今天一起来讨论一下&…

线下终端门店调研包含哪些内容

品牌渠道一般分为线上和线下&#xff0c;线上的价格、促销信息、店铺优惠机制等都可以通过登录查看&#xff0c;但是线下门店的数据则需要进店巡查&#xff0c;否则无法得到真实的店铺销售数据&#xff0c;当然也有品牌是靠线下的业务团队报备机制获得这些信息&#xff0c;但是…

18.仿简道云公式函数实战-数学函数-AVERAGE

1. AVERAGE函数 AVERAGE 函数可用于计算一组数值的算术平均值。 2. 函数用法 AVERAGE(数字1,数字2,...) 3. 函数示例 AVERAGE(1,3,5)&#xff0c;返回结果为 3 4. 代码实战 首先我们在function包下创建math包&#xff0c;在math包下创建AvgFunction类&#xff0c;代码如…

使用静态HTTP进行缓存:提高网站性能的关键

大家好&#xff0c;今天我们来聊聊如何通过使用静态HTTP进行缓存&#xff0c;来提高网站的“奔跑速度”。没错&#xff0c;就像给网站穿上了一双“风火轮”&#xff0c;让它飞得更快&#xff01; 首先&#xff0c;我们来了解一下什么是缓存。简单来说&#xff0c;缓存就是把你…

浅谈Dubbo核心概念及架构流程

浅谈Dubbo核心概念及架构流程 前言重要概念1、SPI2、ServiceBean3、URL4、Invoker 整体流程1、架构图2、调用链路 笔者碎碎言&#xff0c;我们学习Dubbo应该学的是什么&#xff1f; 笔者是一名业务开发&#xff0c;认为一切目的都要为我们的目标服务&#xff0c;即日常工作有帮…

fragstats:景观指数的突变分析

作者&#xff1a;CSDN _养乐多_ 本文将介绍景观指数时间序列的突变分析&#xff0c;包括突变时间、突变频次等。以及景观指数突变分析所用的软件和 python 代码。 结果如下图所示&#xff0c; 图1 突变频次 图2 突变时间 文章目录 一、景观指数计算二、景观指数时间序列构建…