Немного длинно, прошу прощения — но понятности ради ...
Имеется приложение а-ля Visio — лист, на нём живут shapes. В числе прочего, на этом листе могу жить text boxes — прямоугольники, в которые можно вводить текст. Всё это живёт на отнаследованном от мфсшного CView некотором view, назовём его CEditView. Когда юзер вводит текст в активный текст бокс, я в CEditView::WindowProc() ловлю все WM_IME_xx сообщения, форваржу текст боксу и там их обрабатываю.
Однако, выяснилось удивительное и неприятное: если юзер нажмёт Alt (что в процессе ввода, что просто после старта приложения, и при этом будет выбран сложный язык, для которого нужно composition window (Японский например)) и затем будет вводить буквы, то вместо ожидаемой навигации по меню (по альту первый корневой пункт меню File подсвечивается) он увидит composition window, в которое эти буквы и вводятся. Я это окно не создаю и им не управляю.
Вопрос — как мне избавиться от этого композишн окна так, чтобы IME совсем не отключался и ввод в текст боксы работал, но системное composition окошко не появлялось ?
Извёлся уже, это гадское окошко живее всех живых ...
Спасибо за код, всё как всегда очевидно — но поди дойди до этого сам. Я щас в корень форума по АПИ положу ещё вопрос, который логично вытекает из той же необходимости выборочно запрещать IME, буду признателен, если Вы тоже глянете.
Этот код меняет контексты, но языковая панель не обновляется после изменений ... после suppress она не меняет свой вид, надо на неё кликнуть, чтобы увидеть, что име запретили.
Вы это не бороли ?
Кстати, может быть вообще есть некоторый простой способ решить мою задачу ? Позволить приложению обрабатывать команды меню, игнорируя IME.
CS>Мои эксперементы закончились вот этим:
CS>
Здравствуйте, Romant73, Вы писали:
R>Вы это не бороли ?
Я решал проблему того что например <input type="password"> и некоторые другие элементы не должен иметь IME.
Такое было условие задачи. Т.е. при попадании фокуса на такой элемент IME environment должен пропадать.