|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip8 u2 x4 E0 ?) z$ `) x
* n e9 _% u6 E) S* q
// 輸入法設定狀態" c) W- j- [7 |7 x v, J! T- `9 {. }
HKL hkl = GetKeyboardLayout(0);
}# |; Y, J8 S5 Bif(ImmIsIME(hkl))" q" ~0 V Y; I! f
{
( G6 X, i8 Q' S7 g) W ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
. @( _; t& c) |0 C6 X, B8 C2 C if(IMEFullShape)
4 w' ]& W/ b! F' g( M0 T sprintf(IMEShape, _T("【%s/全】"), IMEName);
1 Z S8 o4 Q7 p* R3 A else
; k7 D& h P3 I: Q sprintf(IMEShape, _T("【%s/半】"), IMEName);& M6 }0 G9 @! {/ b: J- {5 @
} z) E3 L1 C7 c9 e8 o* l- r
else+ v9 J. m" |& v# P0 q$ D9 X/ b1 ~. D
{( i0 D& O% `+ n- x- R
strcpy(IMEShape,_T("【EN】"));
( F1 _9 W6 [' G9 F1 Q9 U( P% G}* [8 _# V" s9 u
+ b- J: G9 G9 d8 T$ Z
// 當中文輸入時6 x3 |1 Y, d$ E1 j1 ~) {1 A
case WM_IME_COMPOSITION:- K1 o+ Y$ ~% z3 U
hIMC = ImmGetContext(hWnd);! R1 L1 k5 d5 C, _8 E- s2 G, F
// 取得中文組字% w+ B2 c$ F$ P
if (lParam & GCS_COMPSTR)& ]/ x6 A9 j/ r/ c/ ?" Y$ R
{
8 ~5 ~4 C2 ?+ U8 k4 H7 u dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
! z" r$ C1 l4 z0 B5 T9 R dwSize /= sizeof(TCHAR);) ^& h! f0 k6 F
szCompReadStr[dwSize] = TCHAR('\0');( |0 p: n# ^! c' N+ H* ]" j
}
$ M2 q1 |" q- \' U# A4 N# q( _" P) G/ v7 \: v6 O
if(lParam & GCS_COMPREADSTR)- @3 B; _& i. F' N
{
b: {! k; ~) _8 m4 f dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));; w& a' S# @& J' F
dwSize /= sizeof(TCHAR);5 l" b% k! N! U) F
szCompStr[dwSize] = TCHAR('\0');
( \. t7 A: Q$ Q9 y! a }. Z1 k3 g! @ g& z# L
8 [2 x0 O! {) Z. T0 Y
if(lParam & GCS_RESULTSTR)
4 d7 t7 O+ o1 I& W; S, ? {1 c/ O9 x" d# G
// 取得輸出字元1 O9 \0 M; y: s O' Y
dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));, s# ?8 L F3 k' I) D
dwSize /= sizeof(TCHAR);
% d6 z8 J+ e: ?( {9 e szChStr[dwSize] = TCHAR('\0');. H) g/ M/ c& P; t" m+ \* X
lstrcat(m_szLineStr, szChStr);
9 f7 M+ u9 w& `$ ^2 f }$ N& C) R: _ c) ?5 a$ o9 _
break; |
|