воскресенье, 11 января 2015 г.

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

Это перевод 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 - это просто остатки, которые так и не были вычищены. То, что сейчас находится в заголовочных файлах - это предпоследний шаг плана по переходу. Последним шагом этого плана было бы полное удаление этих сообщений из файлов заголовочников, но, к сожалению, конечный срок "больше не допускается изменение публичных заголовочных файлов" наступил раньше, чем успели сделать этот последний шаг - поэтому теперь эти сообщения продолжают находится в (публичном) заголовочном файле, и им придётся оставаться там вечно. Даже хотя они ничего не делают.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.