Обработка сообщения WM_IME_COMPOSITION
Приложение с поддержкой IME, которое обрабатывает сообщение WM_IME_COMPOSITION , проверяет биты в параметре lParam и вызывает функцию ImmGetCompositionString для получения указанной строки или данных. В следующем примере выполняется проверка результирующих строк, выделение достаточного объема памяти для строки и получение строки результата из редактора IME.
HIMC hIMC;
DWORD dwSize;
HGLOBAL hstr;
LPSTR lpstr;
case WM_IME_COMPOSITION:
if (lParam & GCS_RESULTSTR)
{
hIMC = ImmGetContext(hWnd);
if (!hIMC)
MyError(ERROR_NULLCONTEXT);
// Get the size of the result string.
dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, NULL, 0);
// increase buffer size for terminating null character,
// maybe it is in UNICODE
dwSize += sizeof(WCHAR);
hstr = GlobalAlloc(GHND,dwSize);
if (hstr == NULL)
MyError(ERROR_GLOBALALLOC);
lpstr = (LPSTR)GlobalLock(hstr);
if (lpstr == NULL)
MyError(ERROR_GLOBALLOCK);
// Get the result strings that is generated by IME into lpstr.
ImmGetCompositionString(hIMC, GCS_RESULTSTR, lpstr, dwSize);
ImmReleaseContext(hWnd, hIMC);
// add this string into text buffer of application
GlobalUnlock(hstr);
GlobalFree(hstr);
}
Связанные темы