|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip2 p! ]$ w9 J! S# X' C
: B3 P) b* O1 u" ^& Y! b// 輸入法設定狀態5 W* b; ^% r+ Z$ {$ k
HKL hkl = GetKeyboardLayout(0);
% b- W( @& Q4 f. Y9 Bif(ImmIsIME(hkl)) |3 ~* Z0 h. U9 V) ^
{
$ k7 k4 J" u0 g) S/ t ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
! h! C% S" I; o' U" [3 u k# O if(IMEFullShape)5 \) h" V* B5 g! H9 f
sprintf(IMEShape, _T("【%s/全】"), IMEName);: t3 v% v7 d# t0 o6 u
else
8 N+ ^9 h' o# p+ u; Z1 N sprintf(IMEShape, _T("【%s/半】"), IMEName);, [+ c; ]% M4 `: e
}# x: ]1 \) d5 X2 x" }# v( F
else
8 z, ]' G% c# f) X0 u{0 w7 h. f( S# d
strcpy(IMEShape,_T("【EN】"));
! B4 b! N. @- M) O% M}2 j z2 R; k0 U1 F v. C. o
3 i4 [) J3 d6 a" R! i1 {2 `4 \
// 當中文輸入時
7 A, u, [4 \( q8 R6 g ucase WM_IME_COMPOSITION:
2 r1 m0 a* c* I1 d hIMC = ImmGetContext(hWnd);- u4 i; U1 M) y W! f
// 取得中文組字
9 r, g+ q: L, z" |) {) C if (lParam & GCS_COMPSTR)) X% [6 ^2 D; I% e
{
7 ^, @- w/ j8 U" L3 m2 a/ G, v dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
- g( O. S" \. L2 v, \0 f dwSize /= sizeof(TCHAR);
; n) O R9 n: _* g2 L. Y# Z szCompReadStr[dwSize] = TCHAR('\0');0 x( L" q$ D8 w# X$ X/ n( O
}3 @2 |3 o) L8 ~
|. ^8 ~; f0 ~& G
if(lParam & GCS_COMPREADSTR)
& ?5 i" M% R4 s* B {
4 U; P2 @ i8 I: ?9 L: ?. b' T9 Y dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
R$ ?3 r- G( @% [ I U' X dwSize /= sizeof(TCHAR);. k' n( |9 X! s6 ~
szCompStr[dwSize] = TCHAR('\0');4 e- _, Z% v2 Q9 o7 P# {
}
! B+ S$ C3 b$ @( [' \+ t- ]2 q
if(lParam & GCS_RESULTSTR)
/ c8 P( H) c6 |: j+ _- x( t- u {
6 }& p3 y# B; b! y% F1 v" I // 取得輸出字元0 g% b; e9 M0 e
dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));. c3 d X9 `7 Y, B) U9 C
dwSize /= sizeof(TCHAR);6 I! v- ^1 @$ Z6 [5 A/ K6 g
szChStr[dwSize] = TCHAR('\0');0 k- Y; J J# |, _) a. e: L
lstrcat(m_szLineStr, szChStr);& ?9 z5 K4 a* x0 d3 f7 m
}
/ Y3 {9 w- g& z5 Z; R break; |
|