IME の確定文字列を取得する

IME を使って日本語などの文字列を入力し、Enter キーで確定したとき、対象のコントロールには WM_IME_ENDCOMPOSITION イベントが送られます。このときに確定された文字列を取得するには下記のように ImmGetCompositionString 関数を使って取得できます。

#include <Imm.h>
#pragma comment(lib, "Imm32")

LRESULT CMyRichEditCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	if (message == WM_IME_ENDCOMPOSITION)
	{
		HIMC hIMC = ImmGetContext(this->GetSafeHwnd());
		if (hIMC)
		{
			int nTextLength = ImmGetCompositionString(hIMC, GCS_RESULTSTR, 0, 0);
			LPTSTR lpszText = (LPTSTR)GlobalAlloc(GMEM_ZEROINIT, sizeof(TCHAR)*(nTextLength + 1));
			ImmGetCompositionString(hIMC, GCS_RESULTSTR, lpszText, nTextLength);

			// ここで IME の入力文字列に対して処理を行う
			OutputDebugString(lpszText);
			OutputDebugString(TEXT("\r\n"));

			GlobalFree(lpszText);
			ImmReleaseContext(this->GetSafeHwnd(), hIMC);
		}		
	}

	return CRichEditCtrl::WindowProc(message, wParam, lParam);
}

kenjinote

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする