Что за дела с сообщением EM_SETHILITE?

Spread the love

Это перевод What’s the deal with the EM_SETHILITE message? Автор: Реймонд Чен.

Если вы посмотрите на документацию по сообщениям EM_SETHILITE и EM_GETHILITE, то увидите просто «not implemented» («не реализовано»). Что тут происходит?

Сообщения EM_SETHILITE и EM_GETHILITE были добавлены в 2002 году для элемента управления «breadcrumb bar» (панель типа «хлебные крошки» aka «навигационная цепочка»). В те времена этот элемент управления был не таким, каким вы можете видеть его сегодня в Windows Vista (набор кнопок со стрелочками, каждая из которых представляет уровень иерархии). В 2002 году breadcrumb bar был просто несколько иначе выглядевшей строкой адреса (т.е. элементом управления edit). Вместо кнопки для каждого уровня в иерархии breadcrumb bar подсвечивал часть пути, когда вы наводили на неё мышью (или использовали клавиатуру для выделения). Вместо стрелочек с выпадающими меню breadcrumb bar ждал, пока вы наведёте на часть пути мышь, и автоматически показывал меню с дочерними элементами.

Потом дизайн breadcrumb bar изменился, а вариант с «просто немного иначе выглядящая строка адреса» был заброшен. Функциональность сообщений EM_SETHILITE и EM_GETHILITE была удалена, но номера сообщений остались зарезервированными — чтобы не сломать код, который уже начал отправлять эти сообщения (прим.пер.: речь идёт о коде Оболочке, внутреннем коде Microsoft). Конечно же, сообщения уже ничего не делают, но, по крайней мере, старый код компилируется и не отправляет случайно какое-то другое сообщение. Те, кто до сих пор продолжают использовать эти сообщения в своём коде, могут удалить их по собственному желанию.

Такова реальность разработки одновременно и библиотеки и клиентского приложения к ней. Если вы ответственны за библиотеку и хотите сделать в ней ключевое изменение (breaking change), то вам нужно делать его по частям, чтобы все клиентские приложения могли плавно совершить переход. Вы не можете просто пройтись по коду всех клиентов и исправить его — это не ваш код, у вас нет к нему доступа. Клиенты принадлежат другим командам разработчиков, а иногда — и другим компаниям. Вам нужно скоординироваться с этими разработчиками, сообщить им ваш план перехода, чтобы они могли продолжить использовать существующий код и выделить время на ваш план перехода.

Сообщения EM_SETHILITE и EM_GETHILITE — это просто остатки, которые так и не были вычищены. То, что сейчас находится в заголовочных файлах — это предпоследний шаг плана по переходу. Последним шагом этого плана было бы полное удаление этих сообщений из файлов заголовочников, но, к сожалению, конечный срок «больше не допускается изменение публичных заголовочных файлов» наступил раньше, чем успели сделать этот последний шаг — поэтому теперь эти сообщения продолжают находится в (публичном) заголовочном файле, и им придётся оставаться там вечно. Даже хотя они ничего не делают.

Читать на сайте автора.

0 ответы

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *