Freigeben über


Verarbeiten der WM_IME_COMPOSITION-Nachricht

Eine IME-fähige Anwendung, die die WM_IME_COMPOSITION Nachricht verarbeitet, testet die Bits im lParam-Parameter und ruft die ImmGetCompositionString-Funktion auf, um die angegebene Zeichenfolge oder die angegebenen Daten abzurufen. Im folgenden Beispiel wird nach der Ergebniszeichenfolge gesucht, ausreichend Arbeitsspeicher für die Zeichenfolge zugewiesen und die Ergebniszeichenfolge aus dem IME abgerufen.

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);
    }

Verwenden des Eingabemethoden-Managers