|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip
! R( z. X* f" P4 _# Q2 K7 }6 M
/ \0 S. m. S$ F// 輸入法設定狀態
4 B* d( a: ]( p/ z; QHKL hkl = GetKeyboardLayout(0);
. W5 }5 x2 a* A- @if(ImmIsIME(hkl))
$ G9 E) ^$ u% Q* V{3 C# d& z" y+ d4 g9 E3 t' J2 t+ d" H3 U
ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
" s: R6 t% r% m if(IMEFullShape)! \. s3 p1 t0 X
sprintf(IMEShape, _T("【%s/全】"), IMEName);
5 V& G) n% B) d else
! d \$ v% D! h' ] sprintf(IMEShape, _T("【%s/半】"), IMEName);
* [7 x* s! h4 `. Z, U}" V+ F }8 y' z
else% z/ d8 U3 I( [4 ?6 C( T/ D
{
. d, P- K- f9 a: u- w strcpy(IMEShape,_T("【EN】"));. d) O7 N* t5 u. F g5 a( z
}3 U4 o8 F( j2 }; j2 p
5 C M7 F- O) e0 R3 ?: R/ E' V
// 當中文輸入時! a3 f# a) V( P
case WM_IME_COMPOSITION:9 n( D, O# ]3 ^: j- f: E
hIMC = ImmGetContext(hWnd);9 \" T7 ?: h( E" A4 {7 E5 f z
// 取得中文組字
! X1 N& k9 Z) t7 Z$ q if (lParam & GCS_COMPSTR)
4 N( i. c) g+ ]( T& p5 v {- w. C/ A( @, Y; b: a
dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
% I( O5 ^0 e/ x+ a" Z; Q dwSize /= sizeof(TCHAR);
( z0 q3 N# V* O' U szCompReadStr[dwSize] = TCHAR('\0');0 e8 ?8 T0 F8 N7 e w' |9 S
}
g7 D/ e" ?6 N* N+ W9 J
; ~. Q) G3 C0 w s, f if(lParam & GCS_COMPREADSTR): w6 {5 x& k' N( k) _" O
{
. F* Y/ G9 C9 A: E) ~5 e' k dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
' m; H( k$ F% h% X2 d( V) l dwSize /= sizeof(TCHAR);
7 B/ S( F- r, p6 e2 k* |+ L: I+ Z szCompStr[dwSize] = TCHAR('\0');
3 ~% T; C2 y+ G+ I0 Q# |: l }- ~" c- o9 t1 W* @& Q9 z
' S8 _- t' X$ n0 X9 H if(lParam & GCS_RESULTSTR)% H S+ q3 C) x
{4 M6 F- y% ~4 N# s
// 取得輸出字元9 x2 H) K& W! L# d" B! ]
dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
! d) _: ?# ]) S: g8 T2 r+ P& [ dwSize /= sizeof(TCHAR); K, x( Q r) e7 {# T' @% D% J
szChStr[dwSize] = TCHAR('\0');
! h d. w' g7 @& p2 k- O lstrcat(m_szLineStr, szChStr);' _! Z$ |. U3 f8 t3 D- V
} p0 }0 o% A8 q1 ]: v; s
break; |
|