|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip
$ O, ^# z3 \& C3 i0 E7 ]9 v4 c; e
// 輸入法設定狀態
; l) ~3 e2 f% j8 i, eHKL hkl = GetKeyboardLayout(0);
7 e) B2 o8 D' g/ oif(ImmIsIME(hkl))
! {* l/ a1 _# ]- Y3 d{
9 `1 n, |. T8 A d' ]: _: ?& n ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);) ?! o9 g$ }) x- m: x: x
if(IMEFullShape) p8 R, @9 H; w! H; E
sprintf(IMEShape, _T("【%s/全】"), IMEName);
2 P7 b, R- t2 d1 ]. i else
" H* K3 j* B+ \% G" i sprintf(IMEShape, _T("【%s/半】"), IMEName);
- c4 i Q' c+ {: |) j( v% ?}
" B! ?6 x& |0 y0 P) F' Kelse
- t/ A: l! d7 `5 E{
, x& l7 e( Q, B2 f% H L4 e# } strcpy(IMEShape,_T("【EN】"));
g3 z8 Z4 j, }: ]) @, ~/ u}' |$ [6 h# q8 u% `6 ?3 n7 S8 J: q2 D
+ n/ _1 q- J$ {' s// 當中文輸入時$ L8 o* n* O I8 b
case WM_IME_COMPOSITION:" _ @# k' t3 o* m7 Z1 a
hIMC = ImmGetContext(hWnd);8 \ `( P! z4 f% N# l
// 取得中文組字
, l' Y, a+ P& L# K. D9 U. F if (lParam & GCS_COMPSTR)
! ^4 A* Y$ M: _7 e3 T3 ~2 _ j( Y {
7 s0 x# J, h- w: `$ U dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));8 O: N5 V$ K" _4 ^8 O1 |! F; z Z
dwSize /= sizeof(TCHAR);% Q* V) M/ O3 z$ ?& N
szCompReadStr[dwSize] = TCHAR('\0');
3 f: V; x! V9 h& u( f }: `1 t1 u7 q# ]5 w
; W; Y4 `; O" v* Q: ^
if(lParam & GCS_COMPREADSTR)$ F: S/ X3 h1 j
{- p2 q z0 {' |* ?- y+ S& f
dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));0 s7 ]5 q! ^$ |: W0 M
dwSize /= sizeof(TCHAR);7 m% O! n7 `7 R0 g# |
szCompStr[dwSize] = TCHAR('\0');; ^) c3 C b" l, _5 J: p; x
}
% C7 A# Q: f2 G/ z* f" H) a9 U$ A; u
if(lParam & GCS_RESULTSTR)8 x4 I( _8 W" w' Z
{
& {: |) o& o2 J" e: e; j // 取得輸出字元
4 ~- G; V. s r6 x4 K& H; j dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
2 q2 s5 p6 q8 u dwSize /= sizeof(TCHAR);
( d& f0 [! `, o szChStr[dwSize] = TCHAR('\0');/ B3 M4 p' O0 Z8 U- i' i4 E0 M, O
lstrcat(m_szLineStr, szChStr);* H Q' v, q& l8 w; Z. ]# k* T
}% K1 e% @0 S9 [' u* z, b$ N4 _& ?
break; |
|