What's the deal with the EM_SETHILITE message? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071025-00/?p=24693
Raymond Chen 2007年10月25日
简要
文章讨论了
EM_SETHILITE
和EM_GETHILITE
消息在文档中显示为“未实现”的原因。这些消息最初在2002年为面包屑栏设计,但随着面包屑栏设计的变更,这些消息的功能被移除,消息编号被保留以避免构建失败。文章强调了同时开发库及其客户端时的现实问题,即在进行重大更改时需要分阶段进行,以确保所有客户端能顺利过渡。尽管这些消息现在没有效果,但它们仍然存在于公共头文件中,因为公共头文件不允许更改。
正文
如果你查阅EM_SETHILITE
和EM_GETHILITE
消息的文档,它们只会显示“未实现”。这是怎么回事?
EM_SETHILITE
和EM_GETHILITE
消息是在2002年为面包屑栏添加的。在那个时代,面包屑栏并不是你在Windows Vista中看到的样子,一系列带有下拉箭头的按钮,每个按钮代表层次结构中的一个级别。那时候的面包屑栏只是一个外观华丽的地址栏(即,一个编辑控件)。面包屑栏不会为层次结构中的每个级别都有一个按钮,而是如果你将鼠标悬停在路径组件上(或使用键盘选择它),它就会高亮显示该路径组件。面包屑栏没有下拉箭头,而是等待你将鼠标悬停,高亮的路径会自动展开以显示同级项目的菜单。
面包屑栏的设计改变了,那个“外观华丽的地址栏”设计被放弃了。EM_SETHILITE
和EM_GETHILITE
消息的功能被移除,但是为了避免在有人使用这些消息的情况下造成构建失败,消息编号被保留了下来。当然这些消息现在没有任何效果了,但至少产品仍然可以构建。使用这些消息的人可以按照自己的时间表逐渐放弃它们。
这是同时开发库及其客户端的一个现实问题。如果你是负责库的人,并且你打算进行重大更改,你必须分阶段进行,以便所有的客户端都能顺利过渡。你不能自己更改所有的客户端,因为它们不属于你更改的范围,你可能也无法访问源代码。客户端属于其他团队,甚至其他公司。你必须与这些其他团队协调,并让他们知道你的过渡计划,以便他们可以将其纳入自己的时间表。
EM_GETHILITE
和EM_SETHILITE
消息仍然存在的事实只是从未被清理的遗留污垢。现在头文件中的内容是过渡计划的倒数第二阶段。最后阶段本应是完全从头文件中移除这些消息,但是“不允许对公共头文件进行更改”的截止日期在最后阶段执行之前就到了,现在这些消息在一个公共头文件中,它们必须永远保留在那里。即使它们什么也不做。