|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip8 j8 z- a& {$ V+ L$ h/ M/ M
5 B/ x' F( B5 _8 f* ^
// 輸入法設定狀態0 Z/ `4 P6 \6 r1 {
HKL hkl = GetKeyboardLayout(0);
; T% @5 c+ d! i& R8 {0 Qif(ImmIsIME(hkl))8 n0 J+ G0 `- |+ U* F5 q, ]; A
{
5 `' a4 G2 o# S6 a$ i5 M8 N7 y ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);" s* \5 f) W* T- q2 R P$ S- I
if(IMEFullShape)
3 o- K. F+ ]( y8 v sprintf(IMEShape, _T("【%s/全】"), IMEName);
! {, x8 O3 d6 C; j( M& ^$ d) @' c else5 v' ~# m$ K* w F) C! O: q8 z! }
sprintf(IMEShape, _T("【%s/半】"), IMEName);
3 v5 L# n/ t5 y H& p- c: R0 V$ T}
2 V9 H6 Y9 x, h3 r1 z4 {" F# Eelse& ^5 T7 ~$ z) I
{% m8 Q( U* r/ w" ?5 Q. \9 N
strcpy(IMEShape,_T("【EN】"));7 M) F! `5 r3 S" u2 @
}
% E% r B& D2 R3 o( ^- V2 T: m
% A7 x( t- o7 e/ R( P5 n& L// 當中文輸入時
6 C1 j* g1 X& W( Lcase WM_IME_COMPOSITION:
) y% v7 z5 N% s0 Z hIMC = ImmGetContext(hWnd);% S& b* ^* I: W9 [
// 取得中文組字
2 J/ \" U- l" h if (lParam & GCS_COMPSTR)
8 L# `1 H: f5 Z5 U" p6 m1 }3 U {
8 W0 s/ e+ k" J dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));1 C+ T- e: C* C/ T+ }: M
dwSize /= sizeof(TCHAR);2 P# j) K* |& m) q8 H; K" w, }
szCompReadStr[dwSize] = TCHAR('\0');! H. B( D' L3 W$ i# c. F5 m5 f4 \
}
7 O% B' f# O+ G+ V' U7 X
/ }6 X% l& ] R$ G9 @ p: k if(lParam & GCS_COMPREADSTR)
R' @, V8 Y. n: w q& d1 T3 N {
0 F8 L& p1 A( ^. m6 U0 o+ [% l dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));: S% i, i6 f9 h$ E# w3 ?# i
dwSize /= sizeof(TCHAR);( Q a6 @ @( P, _' y! J
szCompStr[dwSize] = TCHAR('\0');6 z3 W x" Q* {$ j
}: x/ b$ ~8 f- A
1 W1 D* t* T. @' g1 U if(lParam & GCS_RESULTSTR)
* A' A+ N$ ~! J8 U, e( W0 { {3 u; e- u- g5 U% H& z6 i
// 取得輸出字元
. S0 {" z+ `8 |: z( P dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));5 s3 V: U. D2 D4 K+ \: ?) \5 H
dwSize /= sizeof(TCHAR);, O# a% i" Z7 Z5 w+ J
szChStr[dwSize] = TCHAR('\0');
% s! y# |& J: M$ a) H7 j( B lstrcat(m_szLineStr, szChStr);
; D& p; n, ~. |: y }( l5 e* \5 p4 G8 W9 y
break; |
|