|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip0 c1 E7 [4 v: K3 z1 p: P
( j; _& k8 o9 [2 |. n' B- G
// 輸入法設定狀態
$ x* d# K* t2 L0 k/ l( x: }- EHKL hkl = GetKeyboardLayout(0);
5 `+ | A9 k# d9 v8 Sif(ImmIsIME(hkl))+ R/ }, X0 z/ |5 J
{
+ F4 B0 \9 B5 o% S; Y ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
+ I0 k8 Z+ T1 w0 b7 X0 ~: ?; z; x if(IMEFullShape)
$ G! u' ?- V! o sprintf(IMEShape, _T("【%s/全】"), IMEName);
& y& u+ w# }# f& K else
0 b% y1 _+ H! F2 W/ U S* } sprintf(IMEShape, _T("【%s/半】"), IMEName);1 G/ ~ B: N% I3 I1 {; D& H
}
' J5 Y1 q4 t* P2 Pelse8 w4 D9 ^5 M k$ @$ h: X
{
0 Z' U5 o# w' {, M' T* m& S strcpy(IMEShape,_T("【EN】"));$ t% j+ y( u% _5 |3 |
}
1 Y/ V7 C l4 @3 K' S3 x; m- X* q7 ?7 o
// 當中文輸入時: p" i( @8 N% ]' `% r% p% H
case WM_IME_COMPOSITION:
+ @( {9 I, R* p hIMC = ImmGetContext(hWnd);+ V4 H& z$ M) E+ Y
// 取得中文組字
: m+ p4 W Z% \1 t! f9 F3 W if (lParam & GCS_COMPSTR)6 t4 q. o) \/ ^. @2 _
{! t# b! ?. Z# {5 ~' V
dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));% U0 u6 r! n4 j( I5 C
dwSize /= sizeof(TCHAR);* C0 ]! f6 u; U$ K: _) W; G# h
szCompReadStr[dwSize] = TCHAR('\0');3 p" H. C; M8 k" V. n. G4 B
}
* x8 J- V) U+ w9 C* Z+ Y. E) l. Q- P$ `( u
if(lParam & GCS_COMPREADSTR)9 r( d+ Z5 G; f( Q, q# R+ _
{
) d9 F7 N3 ]/ u& s/ { dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
8 j. E# @9 X/ }1 j dwSize /= sizeof(TCHAR);
/ }. x6 r$ ] x0 ] szCompStr[dwSize] = TCHAR('\0');
1 Q7 w+ t4 S& ?3 L M }1 z5 w" c( n- L- j! q
0 q; U9 h2 b- T" j$ g2 [- T1 v
if(lParam & GCS_RESULTSTR)
8 r+ f2 O- A5 M, H {( |- [$ b5 K1 A, o
// 取得輸出字元
3 n. S" V$ J+ l7 ` dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));* G* Z- S6 `* B1 s! N H
dwSize /= sizeof(TCHAR);7 j& i8 [( R: W. {1 _7 C6 |9 E$ J) q2 ?
szChStr[dwSize] = TCHAR('\0');
8 J) U) c3 N6 ~ p1 t lstrcat(m_szLineStr, szChStr);
, ^& T8 j) v9 g- N+ F Y9 \/ `% f }3 ~7 a. A% X2 w
break; |
|