2009-01-11 29 views
14

Quiero hacer un control que maneje la entrada del usuario, por lo que quiero ser capaz de manejar diferentes teclados, y una de las maneras es usar IME.¿cómo se usa IME?

Si no lo maneja, hay una ventana flotante que aparece cuando tiene IME activo (por ejemplo, escritura japonesa activa). Encontré los mensajes que deben ser atendidos, pero no sé cómo enviar las claves que estoy atrapando al IME y cuándo obtengo un char convertido válido.

Respuesta

21

Soy un SDE Microsoft que utiliza para mantener la (Windows y Office) IME coreano por un tiempo ...

Por desgracia la mejor documentación de la API de IME es proporcionada por los sitios no son de Microsoft:


Aquí es la documentación oficial de Microsoft: Input Method Manager (MSDN)

También hay un IME nuevo y más avanzado basado en el Marco de servicios de texto (TSF) que Microsoft preferiría que usara, pero es aún más complicado y la antigua API se emula bastante bien. Si no necesita ninguna de las características avanzadas (como la entrada a través de la tableta/reconocimiento de voz/imán/IME más elegante), entonces el uso de la antigua API es suficiente.

La mejor documentación sobre el Marco de servicios de texto es TSF Aware Blog escrita por otro desarrollador de Microsoft. Eric Brown puede incluso responder personalmente sus preguntas si toma esta ruta.

Aquí es la documentación oficial de Microsoft para TSF: Text Services Framework (MSDN)

Una característica de TSF se puede encontrar útil es la capacidad de suprimir la prestación del IME (necesario para juegos de pantalla completa que necesitan para hacer que el IME a sí mismos, por ejemplo).Simplemente dígale a TSF que su aplicación renderizará la GUI de IME, luego implemente un método de representación vacío: UILess Mode Overview (MSDN)

+0

Es una pena que los primeros cuatro enlaces estén todos inactivos. No pude encontrar * ime_input.h/cc * en la fuente Chromium, parece que han dividido las fuentes en varios archivos. – ComFreek

+1

@ComFreek: Encontré ~ 2009 versiones de ime_input.h/cc y actualicé los enlaces en mi respuesta. – Leftium

+0

Enlaces actualizados: [ime_input.h] (https://chromium.googlesource.com/chromium/chromium/+/8da845c82ec64ba85c8222e61c249244a492bebd/chrome/browser/ime_input.h) [ime_input.cc] (https: //chromium.googlesource. com/chromium/chromium/+/8da845c82ec64ba85c8222e61c249244a492bebd/chrome/browser/ime_input.cc) – eyelash

0

No creo que quiera suprimir un IME para que no se muestre. Nunca he usado uno que no sea para probar, pero tengo entendido que un IME es la forma esperada/predeterminada de ingresar caracteres no ingleses usando un teclado inglés.

Si está escribiendo un control y quiere soportar completamente un IME, creo que las dos opciones que tiene son responder a los diversos mensajes de Windows (como WM_IME_START_COMPOSITION, WM_IME_COMPOSITION, etc.) o usar Text Services Framework (TSF) Tengo entendido que TSF es el futuro, y en Vista y Windows 7, todo el código IME se basa en TSF, con los mensajes de Windows todavía allí para la compatibilidad con los programas anteriores.