|
|
一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔: IMEAPPS.zip
5 d5 T, c t" J) I* c2 C( \7 D$ t) {0 s4 h
// 輸入法設定狀態
3 d% }/ M* E5 D! {5 aHKL hkl = GetKeyboardLayout(0);- v& p- w z; J
if(ImmIsIME(hkl))
9 @2 G: N# L+ A{
( s+ W; D& a, \ ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
0 j, j- [. c( J# a! x if(IMEFullShape)$ M% O! h# q) F3 Y5 c4 }1 V
sprintf(IMEShape, _T("【%s/全】"), IMEName);9 J% ]% F, m- M i! a- L: z& u" [
else* o; C: ~- q: Z
sprintf(IMEShape, _T("【%s/半】"), IMEName);
# G* I) r7 F1 H: ^}+ I$ g/ w+ `: R* D! ^
else
% P- T/ x" z5 J N! V0 w{
6 N1 r$ I. k6 F6 n1 h# m g strcpy(IMEShape,_T("【EN】"));# r& Y6 C4 r' y- c3 x) W8 Q9 {
}! h+ s9 ^/ Z+ R2 H
5 o/ `8 d, d2 a# {" j3 _$ v3 s// 當中文輸入時$ \0 l9 S/ i% P" C( U
case WM_IME_COMPOSITION:
t+ h% j( _8 z% ]" f hIMC = ImmGetContext(hWnd);
/ p! T- Z, X q' j. E // 取得中文組字
0 g) a+ g2 V3 D$ d" x# i if (lParam & GCS_COMPSTR)& T; Q( L. w$ ]& \
{
3 {) b6 B0 ?& m9 B dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));+ e0 U, |3 s7 D0 ?5 t) n: E
dwSize /= sizeof(TCHAR);
3 U, i4 G8 J2 k+ T/ W) [+ [ szCompReadStr[dwSize] = TCHAR('\0');- z/ S5 k: F2 `& @5 Q
}( y f7 t' N& X+ t8 t. x$ Q6 _8 X
4 U @6 \8 X' t, Z
if(lParam & GCS_COMPREADSTR)* U' K) W% [, P* X8 W5 q
{7 R4 ~9 n. m+ R
dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
9 c) M, Q6 y" t dwSize /= sizeof(TCHAR);
( Y# k* S9 V/ ?( w szCompStr[dwSize] = TCHAR('\0');
! {4 v/ Q. P+ C, f, p; j/ [ } S5 @( f7 P( ?) y1 k
* T6 @3 D, n& s' y6 I$ ~ if(lParam & GCS_RESULTSTR)
3 L) b# X! e' g4 R3 Z- A ` {$ U( @0 I- ~. X- H i
// 取得輸出字元
+ N" t( V/ r& O( L+ |4 T dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr)); L8 f5 ?! |" Q4 _: J3 K
dwSize /= sizeof(TCHAR);
2 N' y* q- ~& Y" f+ P3 a szChStr[dwSize] = TCHAR('\0');
# y$ L/ g: x( z- h lstrcat(m_szLineStr, szChStr);- Z# p0 V* p y- Z
}
: t7 y7 r% Z, N- z+ r break; |
|