IMEの入力中の文字列に関する情報を取得(C言語)

キーワード:

GetDC, GetClientRect, FillRect, ImmGetContext, ImmGetCompositionString, TextOut, ImmReleaseContext, ReleaseDC

サンプルコード:

#define INFONUM 4
#define BUFMAX 1000

void DispCompStrInfo(hDispWnd, hTargetWnd)
HWND hDispWnd; /* 情報を表示するウィンドウ */
HWND hTargetWnd; /* 情報を取得するウィンドウ */
{
	HIMC hImc;
	char InfoResult[BUFMAX], InfoMsg[BUFMAX];
	LONG RetSize;
	HDC hDC;
	RECT r;
	int i;

	DWORD InfoType[INFONUM] = {
		GCS_COMPREADSTR, 
		GCS_COMPSTR, 
		GCS_RESULTSTR, 
		GCS_RESULTREADSTR, 
	};
	
	char *InfoTitle[INFONUM] = {
		"入力されている文字列の1バイトカタカナによる表現",
		"入力されている文字列", 
		"最後に変換した際の変換結果",
		"最後に変換した際の変換結果の1バイトカタカナによる表現",
	};

	/* 表示領域の初期化 */
	hDC = GetDC(hDispWnd);
	GetClientRect(hDispWnd, &r);
	FillRect(hDC, &r, (HBRUSH)GetStockObject(DKGRAY_BRUSH));

	/* 入力コンテキストの取得 */
	hImc = ImmGetContext(hTargetWnd);

	/* 文字列情報 */
	for(i=0; i<INFONUM; i++) {
		/* 情報の取得 */
		RetSize = ImmGetCompositionString(hImc, InfoType[i], InfoResult, BUFMAX);
		InfoResult[RetSize] = '\0';

		/* 情報の表示 */
		wsprintf(InfoMsg, "%s: %s", InfoTitle[i], InfoResult);
		TextOut(hDC, 0, i*20, InfoMsg, lstrlen(InfoMsg));
	}

	/* 入力コンテキストの解放 */
	ImmReleaseContext(hTargetWnd, hImc);

	/* 後処理 */
	ReleaseDC(hDispWnd, hDC);
}

(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。