|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip% }" f: w$ w- d# u7 U0 O
- o- `, Z" U, N0 B// 輸入法設定狀態, `" r5 J! S" M
HKL hkl = GetKeyboardLayout(0);
; X, i! K5 U: R: B0 A9 l# zif(ImmIsIME(hkl))
9 B! E3 w9 i$ j3 f& S& w6 ]( O{
P. k5 s2 w) {8 y+ A( X3 b& p ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);, m2 O# z) x! c& b( ~/ K# j
if(IMEFullShape)- i. X4 ^. `; Z0 m1 d/ n
sprintf(IMEShape, _T("【%s/全】"), IMEName);
* b# v5 c) b, t: N3 p" J0 r else6 Y, z/ R! r1 A; p9 l) q3 i* ?
sprintf(IMEShape, _T("【%s/半】"), IMEName);
, v: _& q ~/ `6 P ]3 p5 Y. s}; x' E2 x3 X0 Z, ?1 @& a R
else
) ^. z+ r2 {/ b+ B5 U{* S, V& G7 g3 \2 N; g# \" i
strcpy(IMEShape,_T("【EN】"));
" t8 ^0 Z1 v# b; `- e# D8 K}
6 U. t* }6 v g x5 O: \6 V+ Z. Z* X" n9 i3 j
// 當中文輸入時/ O( P, f4 ^/ u& B* H+ q1 z, T2 A
case WM_IME_COMPOSITION:
" ]. x4 w9 h- u$ }3 ~8 F8 E3 n hIMC = ImmGetContext(hWnd);% E& y; W, }- l9 @* @+ S
// 取得中文組字3 f$ S6 C" z z& W/ ~( S4 c/ _
if (lParam & GCS_COMPSTR)
7 y# w. n1 b3 D4 }8 L' A {
8 S5 J; k$ K$ e; ?5 D# q dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));& k3 a! ?' U6 d, h
dwSize /= sizeof(TCHAR);
2 @/ Q6 s' Z" e: B0 Z( y( x4 S szCompReadStr[dwSize] = TCHAR('\0');
* }8 k; S' Z7 A' Y' W9 J9 d }
, x% }9 T& C' X2 K Y4 ` O( V# f3 C4 L5 B, d
if(lParam & GCS_COMPREADSTR)
W- V' {" B1 @ w6 N {( P0 @! r/ Y( k4 z! P. h
dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));+ L! Y2 W% x0 \+ ?8 e
dwSize /= sizeof(TCHAR);
- s3 U& t! ]- B; j szCompStr[dwSize] = TCHAR('\0');5 `4 _& e- A Y- `+ P2 P/ {1 ~6 Z
}
) ?& C6 q1 L" X0 L% B7 C* ~' Y$ z0 }3 k$ Q
if(lParam & GCS_RESULTSTR)
# l1 O! f# X( _* K6 Q1 Z* U# l6 k {
5 U3 s: C+ y0 W( { // 取得輸出字元
6 n' {: @1 K9 j2 R b" M; ]. ` dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
5 j+ ]3 p0 V- p# N. I( _ dwSize /= sizeof(TCHAR);2 e. Z) y8 T2 ]+ m
szChStr[dwSize] = TCHAR('\0');
6 ^' F' V- T% Z: H! s lstrcat(m_szLineStr, szChStr);
* f, w! ^& f8 `( W }
|! w* _2 t- v3 P break; |
|