2015-08-06 4 views
0

Я использую управление CComboBox. Когда я ввожу в него некоторые символы и проверяю, какая буква набрана (в PreTranslateMessage()), я всегда получаю заглавную букву в wParam своего сообщения. Мой элемент управления CComboBox не имеет свойства верхнего регистра TRUE. Почему это происходит?Контролирует ли CComboBox всегда заглавные буквы при вводе в него

+2

Возможно, вы проверяете WM_KEYDOWN и получаете код сканирования (идентифицирующий физический ключ, который вы нажали). Вам нужно проверить WM_CHAR. Почему вы используете 'PreTranslateMessage' вместо обычного обработчика сообщений? – peterchen

+0

Каким образом свойство CComboBox "uppercase" влияет на сообщения, отправленные на него? Это свойство может влиять только на то, что делает combobox с сообщениями, которые он получает. (Который: при получении 'WM_CHAR ('a')' ведет себя так, как если бы вы получили 'WM_CHAR ('A')') – MSalters

+0

@peterchen: Да, я проверяю WM_KEYDOWN. Получил точку :) спасибо –

ответ

0

Ключи - забавные вещи. Что такое состояние по умолчанию, строчный или прописной?

Если вы посмотрите на свою клавиатуру, скорее всего, физические клавиши имеют на них верхние буквы. По умолчанию: верхний регистр

Когда вы вводите ключи, вам нужно удерживать клавишу shift для создания верхних клавиш, без клавиш shift вы получаете строчный регистр. По умолчанию: нижний регистр

В качестве альтернативы вы можете использовать ключ Caps Lock. Caps Lock обычно выключен. По умолчанию: строчный.

В непереведенные нажатия клавиш, отправляемое в приложение с помощью VK_A - VK_Z коды клавиш. VK_A - это «A» не «a». По умолчанию: верхний регистр. Caps lock and shift применяются позже, в переводе.

Это могло быть спроектировано последовательно, но этого не было, и теперь мы застряли в беспорядке, чтобы быть обратно совместимым. Если вы хотите «нормальное» поведение клавиатуры, не пытайтесь точно воспроизвести поведение ОС. Там есть такие вещи, как «Sticky Keys» (удерживайте shift, чтобы получить поведение Caps Lock), о котором вы, возможно, даже не знаете. Вместо этого используйте конечный результат из ОС. Для Windows это WM_CHAR.