|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip
* `! ^6 d2 ~, w7 g2 V' }
5 V2 b: {! T# o// 輸入法設定狀態
/ \: {5 L: o1 r/ Q" Q7 UHKL hkl = GetKeyboardLayout(0);& _2 e$ m' ]6 h! @+ T
if(ImmIsIME(hkl))
6 p a. Y7 Y' N{
! r" u2 Y+ A$ i, \ Q; N ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
3 N' M6 E- q' Z# S) n if(IMEFullShape)
( |( ~: n) V3 h- G R, Z sprintf(IMEShape, _T("【%s/全】"), IMEName);1 j( J) v' p$ v
else# ~6 `3 k3 o& l% P/ ^
sprintf(IMEShape, _T("【%s/半】"), IMEName);3 z( K( S+ G/ e; z8 n! |: F4 n6 r
}
3 g$ O4 r6 d& _1 G; a8 Felse
- u8 i0 M. c7 [{! v8 M e$ _! z
strcpy(IMEShape,_T("【EN】"));
7 S& h- |' J* }; b8 D/ o} T. |; T& y {' G0 @
, D- z1 @' R7 {# [1 R2 M7 g// 當中文輸入時
0 R. c/ W& Q i( Rcase WM_IME_COMPOSITION:
8 P+ O* T2 l, _8 ] hIMC = ImmGetContext(hWnd);8 Z. P d1 {$ i* @3 h
// 取得中文組字
, ^/ @! a+ r, b if (lParam & GCS_COMPSTR)" g& b) [# j# N
{7 g; B T0 Y5 u8 B3 z! V
dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));* L6 Y1 ?. n+ l w' w: d, m
dwSize /= sizeof(TCHAR);! A0 O' ^: H- W5 X) ^
szCompReadStr[dwSize] = TCHAR('\0');
1 k o6 v1 O. L; E; j& H }
; F5 G+ l9 I8 F: U$ ]- Y# `* s8 b
if(lParam & GCS_COMPREADSTR)
9 N( D" o* s- {! X1 q {0 {; p% `; j4 v6 A$ i
dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
0 P" F; G+ ?4 Y" d, @3 K9 ]8 |1 ` dwSize /= sizeof(TCHAR);8 P E! n6 Q b3 W/ x- `0 Q
szCompStr[dwSize] = TCHAR('\0');8 l- g" M8 T, B/ S. U7 l+ f. K+ U
}
: Q t, W9 m1 Y( n5 A" x% e# r; v) [5 R }, v3 d6 \# ?( V+ j
if(lParam & GCS_RESULTSTR)3 w" G' n+ ^7 k
{+ j1 B# a# U" o% K
// 取得輸出字元
. F8 m" @- L$ q% c: s dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
4 V. k' a9 B+ _/ W* P# Z dwSize /= sizeof(TCHAR);# a* G* a! ]' |, \5 S
szChStr[dwSize] = TCHAR('\0');
$ G: K: y$ w5 v; U& I lstrcat(m_szLineStr, szChStr);" O* ]4 d1 h% V$ |. ^$ U
}
- Q1 E7 C" s( c3 j6 Q1 B- J1 Q. ? break; |
|