Compartilhar via


Processando a mensagem de WM_IME_COMPOSITION

Um aplicativo com reconhecimento de IME que processa a mensagem WM_IME_COMPOSITION testa os bits no parâmetro lParam e chama a função ImmGetCompositionString para recuperar a cadeia de caracteres ou os dados indicados. O exemplo a seguir verifica a cadeia de caracteres de resultado, aloca memória suficiente para a cadeia de caracteres e recupera a cadeia de caracteres de resultado do 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);
    }

Usando o Gerenciador de Métodos de Entrada