|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip" O, {/ C# X; r) k
# @- Z) p4 q1 k/ a
// 輸入法設定狀態) M$ l" W. _ p8 l% X
HKL hkl = GetKeyboardLayout(0);
% n3 E4 Y, {" e2 F3 N9 A: L1 fif(ImmIsIME(hkl))
: \1 `8 W% o) m+ A{
- a' `6 [! n6 [& q ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);7 P6 }- F: i! K$ a+ h0 ]! w
if(IMEFullShape)# ]1 i6 q; j2 i# t( P( O
sprintf(IMEShape, _T("【%s/全】"), IMEName);* _3 U- S3 g) t( F; } k
else
8 s# m8 ~8 w: e* ? sprintf(IMEShape, _T("【%s/半】"), IMEName);: x' v# R; X7 q, P
}
6 r2 i. N$ L0 P, @% C- Gelse
0 B t. j) z' H* P! `( A, C{* ?# p' c5 m/ A% k4 O7 t, R) e. a
strcpy(IMEShape,_T("【EN】"));" s- h% g5 E* p- `/ F
}& N( d# Y S1 Q3 M# [- x
% z% P& Y' U8 ]! @# b
// 當中文輸入時
1 _* e% A m! g" k& _! h( l& dcase WM_IME_COMPOSITION:: x! |7 p7 A6 s1 Q1 k! K0 E
hIMC = ImmGetContext(hWnd);7 l; W: W) t$ @$ S
// 取得中文組字" w* j+ @8 f0 J- T9 Q
if (lParam & GCS_COMPSTR)& F1 t; f$ Z( m" N; t! t% ~
{0 `6 c, e: X3 N( \ ~
dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));4 P$ [# b) ?9 H$ r! [8 ?% [& K0 z
dwSize /= sizeof(TCHAR);
, Y0 V9 s$ I' o& l1 Q2 p( t szCompReadStr[dwSize] = TCHAR('\0');
$ Y# e5 R( Y) | }5 s; i; B' m% u4 Z2 F6 Z
/ @7 {7 W* X5 |$ ]8 i
if(lParam & GCS_COMPREADSTR)
/ L% J# p. J/ h$ W {2 e8 q9 L* S: M/ R, z0 P" _7 g) @
dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
0 S0 }7 i: D4 h, x8 h dwSize /= sizeof(TCHAR);7 u3 b9 x, @1 \ F4 Y
szCompStr[dwSize] = TCHAR('\0');
9 _# f# I) ~0 y0 } }
6 a1 W, ^% C2 P, o! D6 c8 G3 R c$ ~! v( e6 N' S
if(lParam & GCS_RESULTSTR)
) B9 P4 C$ A* [# b3 [6 T C c3 W5 Z {: g6 n" D; w. W
// 取得輸出字元$ @7 a* F' y% \( m- j" w9 _
dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));0 U' ?5 _: D& V- e
dwSize /= sizeof(TCHAR);( S1 p+ q1 I- n' }' U# P9 l( L
szChStr[dwSize] = TCHAR('\0');
?' r. P' {& G, Y5 [6 U5 E0 G lstrcat(m_szLineStr, szChStr);
' Z+ K" ~( f5 h }5 |, r8 {; B* u0 }+ [% P
break; |
|