翻译《The Old New Thing》- What‘s the deal with the EM_SETHILITE message?

What's the deal with the EM_SETHILITE message? - The Old New Thing (microsoft.com)icon-default.png?t=N7T8https://devblogs.microsoft.com/oldnewthing/20071025-00/?p=24693

Raymond Chen 2007年10月25日


简要

文章讨论了EM_SETHILITEEM_GETHILITE消息在文档中显示为“未实现”的原因。这些消息最初在2002年为面包屑栏设计,但随着面包屑栏设计的变更,这些消息的功能被移除,消息编号被保留以避免构建失败。文章强调了同时开发库及其客户端时的现实问题,即在进行重大更改时需要分阶段进行,以确保所有客户端能顺利过渡。尽管这些消息现在没有效果,但它们仍然存在于公共头文件中,因为公共头文件不允许更改。

正文

        如果你查阅EM_SETHILITEEM_GETHILITE消息的文档,它们只会显示“未实现”。这是怎么回事?

        EM_SETHILITEEM_GETHILITE消息是在2002年为面包屑栏添加的。在那个时代,面包屑栏并不是你在Windows Vista中看到的样子,一系列带有下拉箭头的按钮,每个按钮代表层次结构中的一个级别。那时候的面包屑栏只是一个外观华丽的地址栏(即,一个编辑控件)。面包屑栏不会为层次结构中的每个级别都有一个按钮,而是如果你将鼠标悬停在路径组件上(或使用键盘选择它),它就会高亮显示该路径组件。面包屑栏没有下拉箭头,而是等待你将鼠标悬停,高亮的路径会自动展开以显示同级项目的菜单。

        面包屑栏的设计改变了,那个“外观华丽的地址栏”设计被放弃了。EM_SETHILITEEM_GETHILITE消息的功能被移除,但是为了避免在有人使用这些消息的情况下造成构建失败,消息编号被保留了下来。当然这些消息现在没有任何效果了,但至少产品仍然可以构建。使用这些消息的人可以按照自己的时间表逐渐放弃它们。

        这是同时开发库及其客户端的一个现实问题。如果你是负责库的人,并且你打算进行重大更改,你必须分阶段进行,以便所有的客户端都能顺利过渡。你不能自己更改所有的客户端,因为它们不属于你更改的范围,你可能也无法访问源代码。客户端属于其他团队,甚至其他公司。你必须与这些其他团队协调,并让他们知道你的过渡计划,以便他们可以将其纳入自己的时间表。

        EM_GETHILITEEM_SETHILITE消息仍然存在的事实只是从未被清理的遗留污垢。现在头文件中的内容是过渡计划的倒数第二阶段。最后阶段本应是完全从头文件中移除这些消息,但是“不允许对公共头文件进行更改”的截止日期在最后阶段执行之前就到了,现在这些消息在一个公共头文件中,它们必须永远保留在那里。即使它们什么也不做。

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

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

相关文章

Python数字比大小获取大的数

目录 一、引言 二、数字比较的基本语法 三、获取较大的数 使用条件语句 使用内置函数 四、处理特殊情况 比较非数字类型 处理无穷大和NaN 五、应用实例 在游戏开发中比较分数 在数据分析中找出最大值 六、优化与性能 七、总结 一、引言 在Python编程的广阔天地中…

Redis 性能管理

一、Redis 性能管理 #查看Redis内存使用 172.168.1.11:6379> info memory 1. 内存碎片率 操作系统分配的内存值 used_memory_rss 除以 Redis 使用的内存总量值 used_memory 计算得出。内存值 used_memory_rss 表示该进程所占物理内存的大小,即为操作系统分配给…

【qt】纯代码界面设计

界面设计目录 一.界面设计的三种方式1.使用界面设计器2.纯代码界面设计3.混合界面设计 二.纯代码进行界面设计1.代码界面设计的总思路2.创建项目3.设计草图4.添加组件指针5.初始化组件指针6.添加组件到窗口①水平布局②垂直布局③细节点 7.定义槽函数8.初始化信号槽9.实现槽函数…

Sam Altman微软Build 2024最新演讲:AI可能是下一个移动互联网

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

Tomcat部署项目的方式

目录 1、Tomcat发布项目的方式 方式1: 直接把项目发布到webapps目录下 方式2:项目发布到ROOT目录 方式3:虚拟路径方式发布项目 方式4:(推荐)虚拟路径,另外的方式! 方式5:发布多个网站 1、…

无界鼠标与键盘,如何轻松控制多台电脑

简介 在软件开发领域,高效地管理多台电脑是至关重要的。Mouse without Borders软件为开发人员提供了一种便捷的解决方案,使他们能够轻松地在多台电脑之间共享鼠标和键盘。不仅如此,Mouse without Borders还提供了许多高级功能,如…

STM32F1之OV7725摄像头

目录 1. 摄像头简介 2. OV7725 摄像头简介 3. OV7725 引脚 4. OV7725 功能框架图 5. SCCB时序 5.1 SCCB 的起始、停止信号及数据有效性 5.2 SCCB 数据读写过程 1. 摄像头简介 在各类信息中,图像含有最丰富的信息,作为机…

谈谈你对 vue 的理解 ?

1.谈谈你对 vue 的理解 ? 官方: Vue是一套用于构建用户界面的渐进式框架,Vue 的核心库只关注视图层 2. 声明式框架 Vue 的核心特点,用起来简单。那我们就有必要知道命令式和声明式的区别! 早在 JQ 的时代编写的代码都是命令式的,命令式框架重要特点就是关注过程 声明…

world machine学习笔记(3)

打开 可以打开场景设置,项目设置平铺构建设置 场景设置: 输出范围 设置中心点和范围 设置分辨率 项目设置: 设置地图颜色,单位,最高地形高度 点击这个图形进行预览设置 该按钮还有其他的功能 world machine基础流程…

LeetCode算法题:42. 接雨水(Java)

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3…

分享一个用AI降本的思路,不懂代码也能上手

如何用AI解决实际的业务问题? 生财圈友我来利用ChatGPT做算法建模,每年为公司省下6万元。 今天他将分享通过ChatGPT进行数据分析的思路,从最开始定义问题到最终数据论证。 上手的实操过程门槛并不高,但可以实现把官方电商平台的…

huggingface笔记: accelerate estimate-memory 命令

探索可用于某一机器的潜在模型时,了解模型的大小以及它是否适合当前显卡的内存是一个非常复杂的问题。为了缓解这个问题,Accelerate 提供了一个 命令行命令 accelerate estimate-memory。 accelerate estimate-memory {MODEL_NAME} --library_name {LIBR…

Ubuntu22.04虚拟机设置静态IP

虚拟机设置静态IP 按下电脑的 “win”键,在弹出的输入框中输入“控制面板”,选中控制面板 1.选择 “网络和Internet” 2.选择 “网络和共享中心” 3.选择 “更改适配器设置” 4.选择 “VMnet8”,双击打开 5.选择 “属性” 找到 “Internet …

Reactor设计模式

Reactor设计模式 Reactor模式称为反应器模式或应答者模式,是基于事件驱动的设计模式,拥有一个或多个并发输入源,有一个服务处理器和多个请求处理器,服务处理器会同步的将输入的请求事件以多路复用的方式分发给相应的请求处理器。…

Qt 界面上字体自适应控件大小 - 随控件缩放

Qt 界面上字体自适应控件大小 - 随控件缩放 引言一、设计思路二、进阶版大致思路三、参考链接 引言 Qt控件自适应字体大小可以用adjustSize()函数,但字体自适应控件大小并没有现成的函数可调. - 本文实现了按钮上的字体随按钮大小变化而变化 (如上图所示) - 其他控件…

10款免费黑科技软件,强烈推荐!

1.AI视频生成——巨日禄 网页版https://aitools.jurilu.com/ "巨日禄 "是一款功能强大的文本视频生成器,可以快速将文本内容转换成极具吸引力的视频。操作简单,用户只需输入文字,选择喜欢的样式和模板, “巨日禄”就会…

Python | Leetcode Python题解之第111题二叉树的最小深度

题目: 题解: class Solution:def minDepth(self, root: TreeNode) -> int:if not root:return 0que collections.deque([(root, 1)])while que:node, depth que.popleft()if not node.left and not node.right:return depthif node.left:que.appen…

Qt学习记录(14)线程

前言&#xff1a; 我的臀部已经翘到可以顶起一屁股债了 为什么要使用线程 什么时候用线程 复杂的数据处理 头文件.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer>//定时器头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; }…

Hive安装教程

前置条件:hadoop&mysql docker容器安装mysql-CSDN博客 以下的/opt/bigdata目录根据自己实际情况更改 1.上传hive包并解压 tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/bigdata/ 2.修改路径 mv /opt/bigdata/apache-hive-3.1.3-bin/ hive cd /opt/bigdata/hive/…

CIC滤波器

CIC滤波器结构简单&#xff0c;没有乘法器&#xff0c;只有加法器、积分器和寄存器&#xff0c;适合工作在高抽样率条件下&#xff0c;而且CIC滤波器是一种基于零点相消的FIR滤波器。 CIC滤波器分为单级和多级滤波器。 1.在单极滤波器中&#xff1a; 当CIC滤波器的长度M远大于…