|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip
) A% S i: d, m) U# O( S" O9 Y; A
// 輸入法設定狀態8 ~$ V5 }" z/ N3 K9 O
HKL hkl = GetKeyboardLayout(0);
% d1 r' W3 k" D! ^. h! m: yif(ImmIsIME(hkl))
9 x( J0 v- n" _9 w, W& L3 }2 e{
$ Y9 k: ? I ~9 n& u! a ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
$ d1 j0 g' b; a; r- ^# _# h7 s if(IMEFullShape)
& E/ U( C6 T5 T sprintf(IMEShape, _T("【%s/全】"), IMEName);
. c @1 x! |- t. T( | else5 G3 H4 p6 S- i. c
sprintf(IMEShape, _T("【%s/半】"), IMEName);
( X) Q. T: z# s- F) {1 I, S}, D. Z4 i, e- b# G1 p& |
else* A- F1 a- F" i1 \+ o0 s/ H+ r
{
0 `0 ?" [" y5 ^ strcpy(IMEShape,_T("【EN】"));4 }. Z7 j0 O/ F" x
}: [0 [# B/ G* Y. J$ r( ?8 d
0 V. _0 \, _* U# y// 當中文輸入時
+ V, K8 [+ M2 u1 Zcase WM_IME_COMPOSITION:, X5 i% c1 W8 C6 G9 D8 G# N# g
hIMC = ImmGetContext(hWnd);
3 y1 y* Y" ~% w' i# }0 o // 取得中文組字' p5 \) P C; W7 J; M9 y: G
if (lParam & GCS_COMPSTR)
! a1 d) ~2 ?2 X6 k1 \; R' v" l {
0 Y7 @# |. v+ @( q: |% H! w8 R dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));9 x- w9 n) o! s% {+ C% J
dwSize /= sizeof(TCHAR);4 J; L, F m: [" o
szCompReadStr[dwSize] = TCHAR('\0');: \4 H& l( ^* [. U6 j
}
$ f) U9 d$ f* V) `+ X: @. P, x, D# ?) W& A9 Y, n
if(lParam & GCS_COMPREADSTR)2 d3 U( Y$ N/ K% [3 O7 R
{( q% x. y, {' _" S- q5 n/ X9 x
dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));: g/ x7 G M2 c9 F+ R4 m- x+ b4 m
dwSize /= sizeof(TCHAR);
5 a3 D/ `( T5 m1 X4 H' w4 f. l. x$ v$ s szCompStr[dwSize] = TCHAR('\0');* \& c) H m* N+ J1 n/ W! i8 R/ ~, S
}- _0 z+ ~& R x
/ B& _5 j# u- w" e if(lParam & GCS_RESULTSTR) M' U1 D% _8 f6 J0 @/ v4 T
{
/ _4 G/ _4 C# u C1 D: Z // 取得輸出字元
+ I* N4 e5 h' W dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));- R: \8 f1 h/ H F
dwSize /= sizeof(TCHAR);
3 u9 K) M1 `3 K7 E9 j" F szChStr[dwSize] = TCHAR('\0');' A# d" K+ Y, g$ [ V8 ~
lstrcat(m_szLineStr, szChStr);
$ l; j8 o# L, r7 a }
4 ]5 J: ?% W$ _( N \4 D# ]. L break; |
|