|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip
, \3 s6 L/ @2 P* _( d/ Z0 c2 B& @0 T0 ]' V
// 輸入法設定狀態
# F+ B% u- O3 W" i5 z$ J9 YHKL hkl = GetKeyboardLayout(0);' X$ {# b, D4 [, K
if(ImmIsIME(hkl))/ m& _5 J* W# z6 a/ f
{. a6 \2 a: H* M! N6 n
ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
3 M* I3 h+ d% Y* y! {! T, m B if(IMEFullShape)
2 O4 q; C( L+ T: a. R sprintf(IMEShape, _T("【%s/全】"), IMEName);
& Z1 _% ^: z' y1 q else
9 Q" h5 r$ b* ^6 v sprintf(IMEShape, _T("【%s/半】"), IMEName);+ g/ W5 T' h+ {$ x
}, d4 P4 Z; E) Z4 [) y# F! T6 I& |
else& J, x& h& }0 X0 E/ M
{6 q3 K: j; V! }
strcpy(IMEShape,_T("【EN】"));2 y& N- W6 }& P) r! w& _* E5 n
}
. L& w3 r; O; r
9 [, L) e& P8 d- s; H. C// 當中文輸入時/ ^0 C+ X2 o- m4 J3 x# e
case WM_IME_COMPOSITION:
; o8 N% Z4 E$ q1 K! p6 v1 M1 m hIMC = ImmGetContext(hWnd);
0 ~9 G2 m% P$ a' k4 ~ // 取得中文組字, s% F9 \/ E7 o# s' l5 A. m
if (lParam & GCS_COMPSTR), k/ G8 ^" `: V! F
{' I% T9 P/ P6 k# | K
dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
' g4 r8 o* u* C+ m dwSize /= sizeof(TCHAR);- P {+ g t. I4 F. d; S+ t1 A
szCompReadStr[dwSize] = TCHAR('\0');
8 I+ ]6 V) k. ?2 W- e5 q/ c( @ }
& _8 ^4 J, t4 V$ L" }' y7 n- z
8 Q3 o" s, A$ \, R& y if(lParam & GCS_COMPREADSTR)
2 ?4 M$ m0 c5 z3 g6 [/ N {
1 t$ Z1 w2 O- o0 M" L! M dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));; P3 o- y( f p- \
dwSize /= sizeof(TCHAR);
e( c s+ B4 z% [* k szCompStr[dwSize] = TCHAR('\0');' j- n6 Z( w# i2 m* ^) v* P
}/ _& e- d1 b$ H5 I, d+ u
3 j7 F& Q: Y* c! k/ h
if(lParam & GCS_RESULTSTR)0 Q5 C5 W* ?: x y2 t
{0 Q+ Z/ X- u( e% K9 s
// 取得輸出字元
1 g0 }: L: |9 F: M4 q2 D dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
3 [4 j+ t. Z# a dwSize /= sizeof(TCHAR);
5 D# w$ G0 o o/ E; c szChStr[dwSize] = TCHAR('\0');
* n4 }* ~2 ~7 B) W. Q lstrcat(m_szLineStr, szChStr);# n' m) ]( C+ L8 \& J4 M- y( S1 J2 \
}
* G) |( M. g% e! |' B" ~6 W9 O4 ~ break; |
|