什么情况下不应该使用 LockWindowUpdate ?

在之前的文章中,我们将了解了 LockWindowUpdate 应该在什么场景下使用,也就是拖动的场景。

今天,我们来看看 LockWindowUpdate 被误用的一些场景。

人们看到 LockWindowUpdate 的“您锁定的窗口将无法重新绘制自身”行为,并将其用作 WM_SETREDRAW 消息的一种懒惰版本。

尽管发送 WM_SETREDRAW 消息实际上并不比调用 LockWindowUpdate 难多少。键入的字符数增加了 20 个字符,如果在 中使用 SetWindowRedraw 宏,则为一半。

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

正如我们之前提到的,一次只能锁定系统中的一个窗口进行更新。

如果你调用 LockWindowUpdate 的意图只是为了防止窗口重绘,例如,因为你正在更新它,并且不希望窗口在更新完成之前不断刷新,那么只需在该窗口上禁用重绘即可。

如果使用 LockWindowUpdate,则会产生一系列微妙的问题。

首先,如果其他程序以同样的方式滥用 LockWindowUpdate,那么你们中的一个将失败。谁先尝试 LockWindowUpdate,谁就会得到它,第二个程序就会失败。现在你该怎么办?您的窗口不再锁定。

其次,如果您已锁定窗口进行更新,并且用户切换到另一个程序并尝试拖动一个项目(甚至只是尝试移动窗口!),则该尝试将失败,并且用户现在处于拖放位置由于某种神秘原因而停止工作。然后,十秒钟后,它又开始工作了。“这 Windows 系统有 Bug 啊,”用户咕哝道。

相反,如果决定在进行拖放或窗口移动操作时调用 LockWindowUpdate,则调用将失败。这只是使用全局状态管理局部条件的更一般的编程错误的一个具体示例。

当您想在其中一个窗口中禁用重绘时,您不希望这影响系统中的其他窗口;这是当地的情况。但是你使用的是全局状态(锁定更新的窗口)来跟踪它。

我已经可以预料到人们会说,“好吧,如果某人不执行拖放操作,窗口管理器就不应该让他们锁定窗口进行更新。但是窗口管理器怎么知道呢?它知道发生了什么,但它不知道为什么。

该程序调用 LockWindowUpdate 是因为它懒得使用WM_SETREDRAW消息吗?或者它这样做是为了响应导致拖放操作的某些用户输入?

请注意,您不能只是说“好吧,鼠标按钮必须向下”,因为用户可能正在执行基于键盘的操作(例如使用箭头键调整窗口大小),该操作等同于拖放。

道德问题已经很难解决了,期望计算机能够推断出它着实有点苛刻。

总结

所以,如果不是为了实现拖放场景,请不是使用 LockWindowUpdate。
你大概率需要的是这个:SetRedraw。

最后

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

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

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

相关文章

磁盘阵列(RAID)

1.独立硬盘冗余阵列&#xff08;RAID, Redundant Array of Independent Disks&#xff09; 旧称廉价磁盘冗余阵列&#xff08;Redundant Array of Inexpensive Disks&#xff09;&#xff0c;简称磁盘阵列 用虚拟化存储技术把多个硬盘组合起来&#xff0c;成为一个或多个硬盘阵…

Spark魔力:招聘网站数据深度分析系统

Spark魔力&#xff1a;招聘网站数据深度分析系统 简介数据集技术栈功能特点创新点 简介 在本文中&#xff0c;我们将介绍一款基于Spark的招聘网站数据分析系统&#xff0c;该系统使用爬取的前程无忧招聘数据。通过结合Flask、Pandas、PySpark、以及MySQL等技术&#xff0c;实现…

指定列名自动将Excel内的数据拆分为不同的Sheet(基于Python)

在Python中&#xff0c;可以使用pandas和openpyxl或xlsxwriter库来读取Excel文件、操作数据以及将数据写入新的Excel文件中。以下是一个简单的示例&#xff0c;说明如何读取一个Excel文件&#xff0c;将指定列的数据拆分到独立的sheet中&#xff1a; 首先&#xff0c;确保安装…

大数据机器学习GAN:生成对抗网络GAN全维度介绍与实战

文章目录 大数据机器学习GAN&#xff1a;生成对抗网络GAN全维度介绍与实战一、引言1.1 生成对抗网络简介1.2 应用领域概览1.3 GAN的重要性 二、理论基础2.1 生成对抗网络的工作原理2.1.1 生成器生成过程 2.1.2 判别器判别过程 2.1.3 训练过程训练代码示例 2.1.4 平衡与收敛 2.2…

回顾 2023,展望 2024

by zhengkai.blog.csdn.net 项目与心得 今年最大的项目和心得&#xff0c;非GCP莫属&#xff0c;作为全球顶尖的云平台&#xff0c; GCP有他的优势&#xff0c;也有很多难用的地方。但是作为当时的一个strategic solution&#xff0c;我们的印度本地化项目必须使用GCP&#xf…

uni-app js语法

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

Zookeeper实现分布式锁和注册中心

目录 分布式锁 实现方式 分布式锁场景如何选择Redis和zookeeper 用InterProcessMutex实现分布式锁 zookeeper实现注册中心 分布式锁 实现方式 数据库唯一索引Redis的setnxZookeeper创建临时节点及监听机制Zookeeper创建临时有序节点 分布式锁场景如何选择Redis和zookeepe…

App Inventor 2 接入短信服务,实现短信验证码功能

发送短信验证码功能一般都是基于短信平台提供的sdk进行调用&#xff0c;这里是基于阿里云短信平台进行的开发&#xff0c;阿里云短信平台接入步骤请点此参考。 App Inventor 2拓展提供的函数如下&#xff1a; 主要提供2个函数&#xff0c;生成随机位数的数字随机码 和 发送短信…

01.QT概述

一、QT简介 Qt是一个跨平台的应用程序开发框架&#xff0c;用于开发图形界面和嵌入式应用程序。它最初由挪威的Trolltech公司开发&#xff0c;并于1995年首次发布。Qt提供了一套丰富的工具和类库&#xff0c;用于开发桌面应用程序、移动应用程序和嵌入式系统。 二、QT特点 1.…

jsp介绍

JSP 一种编写动态网页的语言&#xff0c;可以嵌入java代码和html代码&#xff0c;其底层本质上为servlet,html部分为输出流&#xff0c;编译为java文件 例如 源jsp文件 <% page contentType"text/html; charsetutf-8" language"java" pageEncoding&…

【小白专用】winform启动界面+登录窗口 更新2024.1.1

需求场景&#xff1a;先展示启动界面&#xff0c;然后打开登录界面&#xff0c;如果登录成功就跳转到主界面 首先在程序的入口路径加载启动界面&#xff0c;使用ShowDialog显示界面&#xff0c; 然后在启动界面中添加定时器&#xff0c;来实现显示一段时间的效果&#xff0c;等…

基于斑点鬣狗算法优化的Elman神经网络数据预测 - 附代码

基于斑点鬣狗算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于斑点鬣狗算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于斑点鬣狗优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

计算机网络教案——计算机网络设备章节

第五章 计算机网络设备 一、教学目标: 1. 了解计算机网络的主要设备 2. 了解计算机网络设备的主要原理 3. 掌握计算机网络设备的基本用途 4. 掌握计算机网络设备的使用常识 二、教学重点、难点 计算机网络设备的主要原理 三、技能培训重点、难点 计算机网络设备的使用…

创建型--单例模式

1. basic 1.1 什么是单例模式 保证⼀个类仅有⼀个实例&#xff0c;并提供⼀个访问它的全局访问点。 1.2 分类 两种&#xff1a; 饿汉模式&#xff1a;饿了就饥不择⻝了&#xff0c;所以在单例类定义的时候就进⾏实例化。懒汉模式&#xff1a;顾名思义&#xff0c;不到万不…

接收Kafka数据并消费至Hive表

1 Hive客户端方案 将Kafka中的数据消费到Hive可以通过以下简单而稳定的步骤来实现。这里假设的数据是以字符串格式存储在Kafka中的。 步骤&#xff1a; 创建Hive表&#xff1a; 使用Hive的DDL语句创建一个表&#xff0c;该表的结构应该与Kafka中的数据格式相匹配。例如&#…

(六)Java 运算符

目录 一. 前言 二. 算术运算符 三. 关系运算符 四. 位运算符 五. 逻辑运算符 六. 赋值运算符 七. 其他运算符 7.1. 条件运算符&#xff08;三元运算符&#xff09; 7.2. instanceof 运算符 八. Java 运算符优先级 九. 课后习题 一. 前言 计算机的最基本用途之一就是…

Pix2Pix如何工作?

一、说明 在本指南中&#xff0c;我们将重点介绍 Pix2Pix [1]&#xff0c;它是用于配对图像翻译的著名且成功的深度学习模型之一。在地理空间科学中&#xff0c;这种方法可以帮助传统上不可能的广泛应用&#xff0c;在这些应用中&#xff0c;我们可能希望从一个图像域转到另一个…

vue3基础知识一,安装及使用

一、安装vue3 需要安装node&#xff0c;然后在项目所在目录命令行执行以下代码。 npm create vuelatest 回车后需要配置以下内容。 二、安装所需的依赖包并运行 cd到项目目录&#xff0c;执行以下代码安装依赖包 npm i 运行项目 npm run dev 打开浏览器查看结果 ok&#…

重温MySQL之索引那些事

文章目录 前言一、概念1.1 索引作用1.2 索引类型1.3 B树索引结构1.4 B树索引源码分析 二、查询计划2.1 explain2.2 id2.3 select_type2.4 table2.5 partitions2.6 type2.7 possible_keys2.8 key2.9 key_len2.10 ref2.11 rows2.12 filtered2.13 Extra 三、索引优化3.1 索引失效3…

【sql】MyBatis Plus中,sql报错LIKE “%?%“:

文章目录 一、报错详情&#xff1a;二、解决&#xff1a;三、扩展&#xff1a; 一、报错详情&#xff1a; 二、解决&#xff1a; 将LIKE “%”#{xxx}"%"改为LIKE CONCAT(‘%’, #{xxx}, ‘%’) 三、扩展&#xff1a; MyBatis Plus之like模糊查询中包含有特殊字符…