找回密码
 注册
搜索
查看: 6116|回复: 0

[收藏]DX下VC6.0中文輸入問題

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip2 t- e( M; Z) N" g) j- Q# m! R
  E) z% n% M/ R
// 輸入法設定狀態
* b3 J$ A5 }7 J) z! R, O, ~1 YHKL hkl = GetKeyboardLayout(0);
7 `* z6 F2 p( s* g5 n5 a% }+ bif(ImmIsIME(hkl))
- c/ J) w/ u$ ^" O% _9 B5 @, B{0 j+ }+ @3 ^. k% x0 x/ g
   ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);' u/ N( m/ Q# }/ A6 f
   if(IMEFullShape)
% u, q7 v2 b1 m! ?9 w- s$ f; Z        sprintf(IMEShape, _T("【%s/全】"), IMEName);- ]$ K5 t. R( x6 Q$ x6 ~* T$ J
   else
5 x4 @+ g4 i/ t6 c    sprintf(IMEShape, _T("【%s/半】"), IMEName);
, G* F& B. h9 ^, U4 z4 f}
7 c) I$ i9 U  \* X, v& X1 }' Q& Melse2 h. B& _/ k; M7 F* P( X: }
{
1 V3 M# Y. q, n' f% U    strcpy(IMEShape,_T("【EN】"));
- c2 u0 E0 v" `( X}" s) G9 k5 v& E0 @& }

, g( m* d# c1 M+ A// 當中文輸入時& R5 ]  M. A) s( o. o1 P
case WM_IME_COMPOSITION:
9 g1 `% C) \( t7 G8 F    hIMC = ImmGetContext(hWnd);& [! d8 W6 n/ X1 R# v& K3 l
   // 取得中文組字' Z8 |- E9 f. {; m( E/ F
   if (lParam & GCS_COMPSTR)% z$ u" q9 w# K3 c1 o
   {0 I- b7 }5 v6 i# H6 c0 W8 s
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
7 R0 o# d) ~' q( A1 V# ?4 U        dwSize /= sizeof(TCHAR);
; ]" ?7 b. D: C; N' F; [        szCompReadStr[dwSize] = TCHAR('\0');. b5 I& ^+ }; T1 ]1 m
   }# e2 {! y" v9 _5 N( |9 l# r

% d1 j& A2 d( P. ]    if(lParam & GCS_COMPREADSTR)
# E8 M6 W, J5 Y    {
2 p$ x" B. T$ R3 H        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));( h- z3 E; I- g1 X; k* R3 }
       dwSize /= sizeof(TCHAR);
; H9 C3 ~5 r5 U- G: z0 }        szCompStr[dwSize] = TCHAR('\0');) I7 l* J, d5 @! C, F/ }: k  j, A% ]
   }
. t- I# ]9 B4 q: }
" U% X# y; \& \    if(lParam & GCS_RESULTSTR)
! \/ e  {1 @1 q1 P8 j1 e    {
# F7 }# e* Z& V6 q, |. M        // 取得輸出字元7 _/ o$ Y" K+ f1 R2 j
       dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));; K# p2 J( X) k& \& b* P% {
       dwSize /= sizeof(TCHAR);5 i- M: G* \6 N( L1 |1 D5 z7 ^  B
       szChStr[dwSize] = TCHAR('\0');6 z& M1 K/ q( |0 P
       lstrcat(m_szLineStr, szChStr);; @* O' v5 u& P0 O) B7 e0 u" b! A
   }* b4 F; m( P3 ?% ]
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-5-4 18:25 , Processed in 0.018985 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表