|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip
7 D* q" \4 u9 v1 R4 y& J/ g* X( K+ z. a
// 輸入法設定狀態+ x2 t$ y% d" _! u
HKL hkl = GetKeyboardLayout(0);
/ H) \0 y# @+ rif(ImmIsIME(hkl))' A) j3 u7 a6 N9 I8 y
{
; h+ w$ G; ~5 @ Q. ~3 D2 b ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
4 o. P$ i$ \& o$ X- |. [4 P( U9 L if(IMEFullShape)6 k$ X+ V# c6 L' d; U; L1 j- q
sprintf(IMEShape, _T("【%s/全】"), IMEName);
; G+ D0 v$ d3 N' j else; g; R; o* e8 {. |0 [
sprintf(IMEShape, _T("【%s/半】"), IMEName);
+ [3 M; d1 }) J) C% q}
* B% m4 n8 c a2 v: n$ \" M" Lelse
- r: F/ c" o; n$ \7 T I{0 P7 k* r& X% |! ~9 m- W
strcpy(IMEShape,_T("【EN】"));; {& x S$ J1 v& r% f
}2 B1 R& {) R+ s4 U3 l* O
0 Y1 g2 Z1 ]( z) V
// 當中文輸入時
# o5 h* o3 w5 ?- v4 J- }case WM_IME_COMPOSITION:: H. k- D. q7 a: E& ^8 [4 N. D
hIMC = ImmGetContext(hWnd);
- B1 R1 x% E% m0 k // 取得中文組字9 x% A; u4 o# l0 F; A! v! Y6 U; C
if (lParam & GCS_COMPSTR)( R/ e8 n, f" l) p$ f, i3 {% z
{8 U: h1 U0 d' B) f8 f7 ?' }+ K
dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
4 C& A R. ^% l$ z dwSize /= sizeof(TCHAR);: w* _: Q/ A# r2 |2 y6 u6 Q
szCompReadStr[dwSize] = TCHAR('\0');
$ d: [. U w5 x1 R8 d) Z! Q }
2 e- k3 F Q! |: v/ ~, F
0 _' Y! u5 O, v6 A if(lParam & GCS_COMPREADSTR)4 ]9 v8 r& y$ A, a: ^0 }
{
% c5 @. v6 Y7 H J dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
6 e: L4 c9 |3 A+ z. @: f# _ dwSize /= sizeof(TCHAR);
% u# ?3 Q6 ], g; s6 | szCompStr[dwSize] = TCHAR('\0');2 t' T: T0 i6 B7 W2 b. r6 X
}( `$ Q/ s t, L( D5 M* F+ i
; R9 Z' a! o( M; u if(lParam & GCS_RESULTSTR)
: G' x' g' l% \+ D {
# `' D) l% `4 P // 取得輸出字元: d W6 Q w, ^6 m
dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));- ]/ T4 o+ t9 h7 t8 Q) Y4 w
dwSize /= sizeof(TCHAR);
3 x) o1 D, R G1 S szChStr[dwSize] = TCHAR('\0');! t4 U. ~, ~' w! ^
lstrcat(m_szLineStr, szChStr);
3 T0 m# ? o3 W6 o* K$ D" n5 b }
5 j, Z; K- B: i" i; u3 O break; |
|