|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip2 t- e( M; Z) N" g) j- Q# m! R
E) z% n% M/ R
// 輸入法設定狀態
* b3 J$ A5 }7 J) z! R, O, ~1 YHKL hkl = GetKeyboardLayout(0);
7 `* z6 F2 p( s* g5 n5 a% }+ bif(ImmIsIME(hkl))
- c/ J) w/ u$ ^" O% _9 B5 @, B{0 j+ }+ @3 ^. k% x0 x/ g
ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);' u/ N( m/ Q# }/ A6 f
if(IMEFullShape)
% u, q7 v2 b1 m! ?9 w- s$ f; Z sprintf(IMEShape, _T("【%s/全】"), IMEName);- ]$ K5 t. R( x6 Q$ x6 ~* T$ J
else
5 x4 @+ g4 i/ t6 c sprintf(IMEShape, _T("【%s/半】"), IMEName);
, G* F& B. h9 ^, U4 z4 f}
7 c) I$ i9 U \* X, v& X1 }' Q& Melse2 h. B& _/ k; M7 F* P( X: }
{
1 V3 M# Y. q, n' f% U strcpy(IMEShape,_T("【EN】"));
- c2 u0 E0 v" `( X}" s) G9 k5 v& E0 @& }
, g( m* d# c1 M+ A// 當中文輸入時& R5 ] M. A) s( o. o1 P
case WM_IME_COMPOSITION:
9 g1 `% C) \( t7 G8 F hIMC = ImmGetContext(hWnd);& [! d8 W6 n/ X1 R# v& K3 l
// 取得中文組字' Z8 |- E9 f. {; m( E/ F
if (lParam & GCS_COMPSTR)% z$ u" q9 w# K3 c1 o
{0 I- b7 }5 v6 i# H6 c0 W8 s
dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
7 R0 o# d) ~' q( A1 V# ?4 U dwSize /= sizeof(TCHAR);
; ]" ?7 b. D: C; N' F; [ szCompReadStr[dwSize] = TCHAR('\0');. b5 I& ^+ }; T1 ]1 m
}# e2 {! y" v9 _5 N( |9 l# r
% d1 j& A2 d( P. ] if(lParam & GCS_COMPREADSTR)
# E8 M6 W, J5 Y {
2 p$ x" B. T$ R3 H dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));( h- z3 E; I- g1 X; k* R3 }
dwSize /= sizeof(TCHAR);
; H9 C3 ~5 r5 U- G: z0 } szCompStr[dwSize] = TCHAR('\0');) I7 l* J, d5 @! C, F/ }: k j, A% ]
}
. t- I# ]9 B4 q: }
" U% X# y; \& \ if(lParam & GCS_RESULTSTR)
! \/ e {1 @1 q1 P8 j1 e {
# F7 }# e* Z& V6 q, |. M // 取得輸出字元7 _/ o$ Y" K+ f1 R2 j
dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));; K# p2 J( X) k& \& b* P% {
dwSize /= sizeof(TCHAR);5 i- M: G* \6 N( L1 |1 D5 z7 ^ B
szChStr[dwSize] = TCHAR('\0');6 z& M1 K/ q( |0 P
lstrcat(m_szLineStr, szChStr);; @* O' v5 u& P0 O) B7 e0 u" b! A
}* b4 F; m( P3 ?% ]
break; |
|