|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip
; L# f. E4 l. o# G1 A f& `
5 X9 v- N% V: `' Y, a9 @; W// 輸入法設定狀態8 o0 x% ?6 `7 q
HKL hkl = GetKeyboardLayout(0);
) n+ s# u* ]1 C. e& Lif(ImmIsIME(hkl))" v2 q8 F' ~6 o" Y% Y
{/ B' v- }0 |9 l, \- a0 K/ J! K$ B
ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
7 q! e3 l$ ]( l0 u1 p if(IMEFullShape)# J+ z- {8 ]0 D, o3 y$ o& X4 _
sprintf(IMEShape, _T("【%s/全】"), IMEName);
9 b. r* x1 g5 [4 B) J; p else/ h8 s9 t$ b- a4 k& w2 R' }; h
sprintf(IMEShape, _T("【%s/半】"), IMEName);
* `8 B a8 w4 F+ ~7 B( k}8 g6 U) }/ |* B8 V) `/ M
else: g5 ?8 ]# p; \$ J- i% |
{5 m& p, q7 j5 ~
strcpy(IMEShape,_T("【EN】"));
: D7 K- J. q( p4 v5 o3 U, Q}
* u3 p$ p3 e% |- k, p. e
# P8 y9 z* O6 q, ?' f4 D7 a// 當中文輸入時
! c) c: `+ _' d8 S6 D; X2 Dcase WM_IME_COMPOSITION:
) u+ r8 v v: T hIMC = ImmGetContext(hWnd);2 d7 Z0 T! Y+ N( E% ?
// 取得中文組字
; Z) r6 W$ y, m if (lParam & GCS_COMPSTR)( i; o9 i' h8 O& w4 |0 _8 |
{
) s+ A) p- p: b+ m: p dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
) }) |$ e, U& a7 [ dwSize /= sizeof(TCHAR);2 M! w+ l+ v% y" ~% v! ]9 {; T
szCompReadStr[dwSize] = TCHAR('\0');
" K' V' c# Z1 l }
, ^' N; _: d4 ?. H+ t) W' `5 l* ^* P s/ z7 K
if(lParam & GCS_COMPREADSTR)' }. J8 i$ c) n8 N/ E
{: H% l5 c( m$ H# z# \# [ Y
dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));5 U$ s9 G5 o3 e6 Y2 F& Z" |5 ~
dwSize /= sizeof(TCHAR); L! G" Q$ s8 o4 C7 I
szCompStr[dwSize] = TCHAR('\0');. ]) _1 m) C9 t, b7 \2 o9 a) o' h
}& c: H& B2 u# P* B4 c& K
+ p0 D2 p2 d4 n; @4 t
if(lParam & GCS_RESULTSTR), @* b# a* u2 x7 G3 S% j
{
e" C9 K$ D+ C2 o // 取得輸出字元
' J; Z/ e& v; I2 t/ g) `7 x, n dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
. n- W5 b; a5 J- k+ c4 P4 r dwSize /= sizeof(TCHAR);
( Q k+ s+ q# X2 e5 }6 g$ H$ C& _ szChStr[dwSize] = TCHAR('\0');0 t" Z6 m* b% c/ ^5 k4 j
lstrcat(m_szLineStr, szChStr);: }* E" a4 ]( ~ j" C7 B6 X3 w* b
}
( T" ^. u* m! `% c break; |
|