Когда-то давно, в начальной школе мы занимались такой вещью как передача записочек. На записке было написано имя человека, которому она предназначалась; если записка была не вам, то вы должны были передать её дальше. Конечно же, вы не должны были её выкидывать или читать.
Хотя, эти уроки, которые мы выучили в раннем возрасте, не всегда вспоминаются сейчас, когда должны были бы...
Не так давно Реймонд Чен напомнил людям передавать все необработанные сообщения в
DefWindowProc
. И он полностью прав.Я подумал, что можно указать на ещё один хороший пример - уведомление
WM_INPUTLANGCHANGEREQUEST
. Оно обрабатывается простым и детерминированным способом:Возвращаемое значениеТак что если ваше приложение не передаёт это сообщение в
Это сообщение посылается (post), а не отправляется (send), приложению, так что возвращаемое значение игнорируется. Чтобы принять изменение, приложение должно передать сообщение вDefWindowProc
. Чтобы отклонить изменение, приложение должно вернуть 0 без вызоваDefWindowProc
.
Примечания
Когда функцияDefWindowProc
принимает сообщениеWM_INPUTLANGCHANGEREQUEST
, она активирует новую локаль ввода и уведомляет приложение об этом изменении отправкой (send) сообщенияWM_INPUTLANGCHANGE
.
Индикатор языка присутствует на панели задач только если вы установили более одной клавиатурной раскладки и если вы вы включили этот индикатор в аплете панели задач.
DefWindowProc
, то пользователь не сможет изменить раскладку клавиатуры в вашем приложении!Теперь нужно сказать, что этот процесс перестал был истиной в 100% случаев в Windows XP и выше; это так запланировано по дизайну, но, похоже, не указано ни в какой документации. Я объясню что сломало модель и почему (а также, как всё починить, чтобы работало!) завтра...
This post brought to you by "ܞ" (U+071e, a.k.a. SYRIAC LETTER YUHD HE)
Комментариев нет:
Отправить комментарий
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.