|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip1 m: |! f6 Z4 K" P' d' W/ N& Z. ~, G
- g [, _# F- J9 Y# z// 輸入法設定狀態3 y: a; R/ D) m0 z
HKL hkl = GetKeyboardLayout(0);
& x; A# Z7 V& q( H# hif(ImmIsIME(hkl))
u4 n/ Q3 [4 f$ Y{- n" w2 J2 P' j* d; S
ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);; ?0 ~0 h8 D: a9 E
if(IMEFullShape)
6 t3 J& T" x9 R, i2 J5 |! i+ C6 b sprintf(IMEShape, _T("【%s/全】"), IMEName);; ~5 ]& B4 K* |6 Q- G' C) D
else. U7 O3 W9 _1 Z5 o
sprintf(IMEShape, _T("【%s/半】"), IMEName);
9 \+ o4 Z' h/ F}, [$ b. \3 j' N) {
else% ?8 d2 K) C! e
{
& P/ r6 d t; g) J; A$ Y strcpy(IMEShape,_T("【EN】"));. B+ \0 e, q' Y" \: B: c
}/ F# P# `* ^2 C. D T- `& f
, _8 o" Y( a/ h2 B6 V
// 當中文輸入時9 W9 Q1 M* y4 p2 L
case WM_IME_COMPOSITION:
3 P5 U3 [9 n& M- k7 r hIMC = ImmGetContext(hWnd);" W2 W4 U. \7 M
// 取得中文組字& o$ b @: X& \0 k: s
if (lParam & GCS_COMPSTR)! ?! R% H, {! k, l. B! |/ P
{& U" A$ V i9 H5 l
dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));! T5 N, \3 L9 T/ h& R s6 H# G
dwSize /= sizeof(TCHAR);; ?: q, m" K7 m, T7 Y- g: n& N
szCompReadStr[dwSize] = TCHAR('\0');1 J; ?; s, l0 q3 ]; |' M
}
6 I2 C: D$ p9 b& u9 Z
* N r: R3 ^6 r7 b/ z( a) y( x; B if(lParam & GCS_COMPREADSTR)
3 H* X; X. [# L; N, t- x: ? {! j# _+ m: q! ^4 h3 u/ B$ {3 P
dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));8 W P/ t; }4 Z$ B
dwSize /= sizeof(TCHAR);9 Z$ v/ b: t3 T0 }8 a, c5 @7 e
szCompStr[dwSize] = TCHAR('\0');1 n" H& C. X# N0 a* m' @
}
# y+ \6 I6 n, o" o B) m, {6 H Z& M
if(lParam & GCS_RESULTSTR)6 P4 w4 l$ L6 S
{4 g: p; j U0 Z8 S. M! H; N
// 取得輸出字元
; F* Z2 }# S% J9 |- B% Z7 t+ Q dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));- |* E) p7 n( X( B
dwSize /= sizeof(TCHAR);3 u2 Z6 T i. O+ r1 ?4 a o
szChStr[dwSize] = TCHAR('\0');
c3 P7 G6 k( Q. t7 g3 S lstrcat(m_szLineStr, szChStr);
( A, V/ `' x" }# C" p1 w) | }( e* U5 Y/ A; B% ^' [( q, w6 N
break; |
|