|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip, n- `3 R& B) H
5 E7 O# S, U. F// 輸入法設定狀態
# @4 |+ c' d1 I/ I, N2 lHKL hkl = GetKeyboardLayout(0);: l6 U2 x3 p, f' r
if(ImmIsIME(hkl))
) C& ^, {6 F0 T! P P( [4 H{1 E' g5 G, s* }9 l% q
ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
7 j' F% R# [! |5 \' H! c5 c if(IMEFullShape)* w7 S# w% K3 z0 {$ X& A" d
sprintf(IMEShape, _T("【%s/全】"), IMEName);( i& f6 J- h5 J) s4 g( C3 [
else
9 w" P' g& u+ b# T. { sprintf(IMEShape, _T("【%s/半】"), IMEName);
% H) _4 h1 X* _4 U5 a& G}; U. K$ O+ s! C6 n; Y
else
- t0 O5 b0 M" S{
\, ?9 u3 Z/ a: E, Y. W strcpy(IMEShape,_T("【EN】"));
' K" ]7 w2 w' w) k& v# P}6 a% f6 }# A. W$ H8 Z! y
+ a( W) y3 P( P0 o V7 ^// 當中文輸入時
( Y) w" ?$ @9 ?/ L7 F' j o7 u; Lcase WM_IME_COMPOSITION:: G, M" ^2 `9 H' z2 \6 B
hIMC = ImmGetContext(hWnd);
: @0 [0 T$ q/ ?& J7 y, J9 b" b$ Z/ W // 取得中文組字
" |4 ~* ?; j7 H: Z* Z4 {; r- ]8 V if (lParam & GCS_COMPSTR)
% F2 b6 K- A3 V8 g {" l J" W, R1 j( h$ a3 V
dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
- M! j u; h" d- o dwSize /= sizeof(TCHAR);1 V" B4 L8 U0 \. X0 a" H9 O
szCompReadStr[dwSize] = TCHAR('\0');
$ N2 [, k% n: H1 \3 l3 ?. h- C }0 p9 ^( I' [ J+ k
5 P5 x+ L* I) x' h+ k( c8 }. } if(lParam & GCS_COMPREADSTR), R' o2 Q6 F1 O9 |: Q
{
/ T" Y6 H1 ~4 F/ @+ _2 ~5 q$ [ dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
m g/ u; u9 J6 h1 p dwSize /= sizeof(TCHAR);
0 x$ w/ v( M5 q1 S9 J2 H4 K szCompStr[dwSize] = TCHAR('\0');
; Q2 ?/ n+ k& w }; ?% a, P+ o4 w+ w( s; E7 H- q' q
; L& t, K' m6 y) k: O if(lParam & GCS_RESULTSTR); A2 j4 b! }; _" q( z8 ?
{
7 |) h6 s2 ~, p. b# G/ x; ?0 d // 取得輸出字元
. | E$ ^ ^% S A0 g7 S1 L1 \ dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr)); ]1 x; G" l' L6 x$ v
dwSize /= sizeof(TCHAR);
/ l4 ~4 q9 O) S0 v( O* z! D szChStr[dwSize] = TCHAR('\0');' ~3 n: v" Z& l! o* }
lstrcat(m_szLineStr, szChStr); \" l' ]5 t) O$ L# v
}
5 J! W2 O# |2 }) P6 p, g/ N break; |
|