|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip
/ x) n7 e7 B* d' v8 x" V; ?
* T! A. }+ I5 M# W, P// 輸入法設定狀態
' k: J! C! B4 `! s, q; N( jHKL hkl = GetKeyboardLayout(0);$ `- A" B- ^# p2 r0 t4 j9 r
if(ImmIsIME(hkl))
8 E3 E7 L. T2 J{
; q# M( ^: G2 M ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);9 Y/ G! W8 I+ ^. M7 b
if(IMEFullShape)( I f5 D' L- O9 x6 ^8 `4 H
sprintf(IMEShape, _T("【%s/全】"), IMEName);
2 c: H: D6 d8 d" v( M, t2 Q; s else; X. U* P1 ^1 F! m5 e; D
sprintf(IMEShape, _T("【%s/半】"), IMEName);
: _, p3 x- a4 o% ]; f2 s; s}! n" }9 F6 H& c! l* t8 B
else1 G' C* M T& ^8 G4 @
{; j# C; [8 Q+ p% G
strcpy(IMEShape,_T("【EN】"));0 |9 i) p: P. ^5 `
}
4 a, L. b) p% f9 [( G6 T( ^4 e9 ?1 a6 Z' ~$ X6 c* {. {
// 當中文輸入時' E. b" P/ Z$ q! Y0 H9 D/ q
case WM_IME_COMPOSITION:
$ Q( ?. y9 R2 S3 X, j hIMC = ImmGetContext(hWnd);- S2 @9 q% k, c
// 取得中文組字 A( v/ F: S0 Q* @' I
if (lParam & GCS_COMPSTR)( i1 A5 [: p" K+ {4 E
{
- B' A/ j$ C4 [/ Y% S) s dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));- u/ L% b4 u# J% l
dwSize /= sizeof(TCHAR);0 a1 T7 N$ e6 L( c5 ^
szCompReadStr[dwSize] = TCHAR('\0');
6 l/ u) D5 w5 T% O6 z }2 s/ M) e- h9 c* G: H& [
: V" F) `4 v9 a7 U: Y5 s3 ]; Q$ Q if(lParam & GCS_COMPREADSTR)
# B, \) ~ e4 e" `" p {, B+ k4 H8 ~' i3 b* A0 J+ R
dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));3 ]) |9 `* W% ]( ?- D2 E+ w7 X
dwSize /= sizeof(TCHAR);9 F. [" _7 j* e; ?8 O; n% ^
szCompStr[dwSize] = TCHAR('\0');
: ^- Y4 N+ Y; B! \; b }. a: R& H7 X$ K4 ~* w
6 j7 w0 p% w4 Y( G4 H if(lParam & GCS_RESULTSTR)- A: J+ c" R! q2 c0 ?3 v
{
: M$ L6 n1 [9 G // 取得輸出字元- Z- \( X9 k1 T
dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));2 u! X6 M/ _6 b7 c# ?8 _6 k' x& H9 T3 g
dwSize /= sizeof(TCHAR);
9 h% H1 D5 @* G7 c) C szChStr[dwSize] = TCHAR('\0');
' _5 L( k6 x! l1 ], n6 o: P& b" g lstrcat(m_szLineStr, szChStr);, k. z. P0 W* b8 }
}$ q* D8 z( K4 G# k: r
break; |
|