|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip
' I* `2 f! Z0 N+ b8 l
2 } _2 K2 Q" W7 z& I// 輸入法設定狀態
" n& K( E1 x" c: bHKL hkl = GetKeyboardLayout(0);" T0 u7 x0 D; f+ V
if(ImmIsIME(hkl))) ^ g# h0 m! S) I5 G1 x. A! }
{! y" q. t; u. t9 x6 c3 e4 E: h
ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);6 }8 I5 M( s$ l6 e/ \$ r
if(IMEFullShape)2 `, k) V+ h3 @+ E& v
sprintf(IMEShape, _T("【%s/全】"), IMEName);3 f1 s- H( C4 f; b% A7 f
else
+ d3 ?4 v& x% L sprintf(IMEShape, _T("【%s/半】"), IMEName);
" ~+ Q0 X8 T9 A, b S# o0 ]- R}* V) R d9 p0 P0 I& V" c/ a
else8 X/ J& }2 h" z3 p: N6 x
{
7 S/ a& r1 A) F4 e- W; r strcpy(IMEShape,_T("【EN】"));
' g! A& B6 j/ ?! m$ J6 o}
3 T5 y4 s5 v1 b+ w9 Q6 L/ X0 I7 B: @! M- D Y
// 當中文輸入時
: @0 Q) U1 [7 l% }- d) R$ tcase WM_IME_COMPOSITION:
2 k# t% K; j9 W) `- N! w9 g hIMC = ImmGetContext(hWnd);+ ]' C' x! T5 X: B
// 取得中文組字
# [4 R& p4 D/ P' J e if (lParam & GCS_COMPSTR)% [/ G+ L+ u) t9 h# f0 r2 b
{
& |1 E. C, y: v/ U& t# j O dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));; h& l, R$ @) Q# X9 U. _
dwSize /= sizeof(TCHAR);% h! h3 R% N, p1 I( E% e
szCompReadStr[dwSize] = TCHAR('\0');# E4 D3 W' _! ]1 r
}3 c9 Z z/ {3 H+ v- ~3 M
7 P& \* `4 X& V0 H if(lParam & GCS_COMPREADSTR)- M) n0 j+ g- K1 x7 C
{
* b" Q, u4 e/ I# R* L. ~4 O7 x5 I dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr)); S0 i' s, i) i; U; C3 ~3 Q
dwSize /= sizeof(TCHAR);: k6 q- C# a5 M0 ~8 L* ?+ n4 l
szCompStr[dwSize] = TCHAR('\0');
+ Z6 Y3 s/ x' z# F- M/ t3 j B }
8 p, k0 F A! [( _: P& ^# z$ T R1 ?3 v& \; s! d" v
if(lParam & GCS_RESULTSTR)
* W7 L) i6 q6 ^* t- c5 c6 t {
3 m0 `8 U. \- M4 k' w4 ^ // 取得輸出字元
' Z0 e8 r7 b+ {- E# _% V; h$ O. N) Q dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
1 q* ]9 n1 N+ M' A- N dwSize /= sizeof(TCHAR);9 t h j4 c2 _9 r9 t# a) T
szChStr[dwSize] = TCHAR('\0');
8 g- `9 A9 U* q. [& j/ c- o lstrcat(m_szLineStr, szChStr);# m0 h. @ F/ g0 }, h) k$ z9 v
}
) [6 ]* P3 P$ c break; |
|