|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip
4 a; v& V o5 ~, Z- ?+ V9 w3 }+ M. B% t a
// 輸入法設定狀態# h% k7 S( X* s2 b1 t, K
HKL hkl = GetKeyboardLayout(0);
2 {1 @+ h: n. y' Xif(ImmIsIME(hkl))
# a8 u3 Y) U5 [1 v{! x9 ?& @9 x( u: ]
ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
3 G" `# G q+ T3 b if(IMEFullShape)" k6 y0 q4 \* ?4 |7 ?& R# _
sprintf(IMEShape, _T("【%s/全】"), IMEName);
4 K; F+ B7 i1 V9 p0 R else
. [! r0 Q. s, X% c! L4 o3 C sprintf(IMEShape, _T("【%s/半】"), IMEName);9 y- i" m5 c# ]" ?& A2 x
}2 b7 Y3 T6 G) j$ C
else' n! r, @9 A% ]' R8 |* H
{
( N; P4 g# }$ o3 Z strcpy(IMEShape,_T("【EN】"));
. ?+ A- V9 A2 ~% B) |9 W9 g v}# g" Z1 J( s6 j3 r' i* `0 G8 ~+ `
' m; T( M$ p' ?& E7 s g! p// 當中文輸入時
: x5 a0 p8 n' t% i' E. Scase WM_IME_COMPOSITION:
9 q+ ^; f0 \* `+ f7 p+ P hIMC = ImmGetContext(hWnd);- B) G+ `8 H" Y1 v+ W1 S
// 取得中文組字
. D6 w. z8 P' r: y4 v) w% g/ Q y if (lParam & GCS_COMPSTR)
, x% z! i. L1 u' A( Z% L {4 [3 z4 U0 H% S( [8 z2 z" G
dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));6 a- M3 M+ O' M: }' L1 f
dwSize /= sizeof(TCHAR);% R" f _5 M r& w9 B# Y
szCompReadStr[dwSize] = TCHAR('\0');
# S* L$ b. F* o: w1 d/ P }; g4 E* U1 H4 T, x; c r
5 d3 X [& ^ z5 J
if(lParam & GCS_COMPREADSTR)+ r( P$ k* w! B
{
3 W. a/ I! O7 ~% H3 z# F: r5 L dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));* U( T) x$ T) s% j. K# Q& S
dwSize /= sizeof(TCHAR);1 _. @$ I% y+ c# p
szCompStr[dwSize] = TCHAR('\0');
" v0 n) H( B! D }: D3 x; T/ }8 o/ Y1 |
% G$ Z4 @# I4 I5 D if(lParam & GCS_RESULTSTR)
6 M( s1 K" O1 h( b- v {
2 G& T% m3 y, F2 p // 取得輸出字元
- F$ s3 k) P' ]! E9 n dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr)); ^- x7 N7 K$ g" Q
dwSize /= sizeof(TCHAR);; m. q- f/ J- S0 _2 s; A
szChStr[dwSize] = TCHAR('\0');+ s L) K, @& I1 Q% P
lstrcat(m_szLineStr, szChStr);% c( _' f4 B' Z9 _& P1 N" S( k
}
# l! J& z. E! G" j break; |
|