2009-10-14 6 views
2

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

Проблема с IME, особенно KoreanIME. Я получаю WM_IME_COMPOSITION, а затем WM_KEYUP, но никогда не WM_KEYDOWN.

Итак, нижняя строка. Мне нужно получить код ключа, когда я получаю WM_IME_COMPOSITION. Есть ли способ сделать это?

Любая помощь будет принята с благодарностью. Спасибо!

ответ

0

В соответствии с http://msdn.microsoft.com/en-us/library/dd374133(VS.85).aspx составной ключ находится в wParam, закодированном как DBCS (http://www.microsoft.com/typography/unicode/cs.htm). Я думаю, вам нужно извлечь соответствующий байт из слова и решить в соответствии с этим.

+0

спасибо! я думаю, что это он! я попробую это, когда вернусь к работе – wooohoh

+0

Я мог бы извлечь код ascii из DBCS, если IME не находится в середине композиции. В то время как в составе нет, я не мог – wooohoh

+0

. В конце я использовал ImmSimulateHotKey(), чтобы отключить его, когда это не нужно, и снова включить его позже. – wooohoh

0

Я знаю, что это немного поздно, но на благо других, можно было бы использовать

BOOL ImmDisableIME(
    __in DWORD idThread 
); 

Передайте идентификатор потока пользовательского интерфейса, тот, который обрабатывает нажатия клавиш.

http://msdn.microsoft.com/en-us/library/dd318535(v=VS.85).aspx

Смежные вопросы