Поделиться через


Обработка сообщения 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);
    }

Использование диспетчера методов ввода