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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
: N6 i% y' j4 A) w& r: v; w3 K; Y: b1 X  C( k2 `, J1 U
// 輸入法設定狀態
( \( E/ T7 y. H* a3 fHKL hkl = GetKeyboardLayout(0);+ R( s. L% i! W. A9 w
if(ImmIsIME(hkl))
; x8 c7 U; s9 t+ {' ^  V{
1 W3 z# J6 _: t0 s, G+ b    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);" X/ m% P+ g% X! r# h: L
   if(IMEFullShape)
9 H  i$ Y" ?2 O$ i$ K        sprintf(IMEShape, _T("【%s/全】"), IMEName);: }8 o( i) m" |0 N8 L6 ~
   else
( r' F; P- q) c! l    sprintf(IMEShape, _T("【%s/半】"), IMEName);
+ P' Z, i4 L! m2 e7 `' Y}
2 {* Q! }  l8 g$ nelse6 T8 O6 ^3 E6 H! h' S
{- T8 n1 D8 x0 x( x# T- r
   strcpy(IMEShape,_T("【EN】"));
4 J/ K5 R9 a; ~/ Y/ F6 b( W}
& W* j& B' ]' R, ]& w- t
1 d4 }! g% e4 B& v  W3 h// 當中文輸入時
! F  m. e, y3 |8 |8 R8 ~case WM_IME_COMPOSITION:) L; ~' Y! U  k+ h! ?
   hIMC = ImmGetContext(hWnd);
$ [7 x  K: d# T* O    // 取得中文組字
9 A  ~2 v0 o' n; M7 z3 \9 J. ~    if (lParam & GCS_COMPSTR)* I' D% E  u  T8 `7 r
   {
2 d7 w+ k) i4 B" f. O        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
3 X2 K$ F% i' h        dwSize /= sizeof(TCHAR);
6 _8 T- i, ?" `1 V        szCompReadStr[dwSize] = TCHAR('\0');' f; ?4 v& ~! K4 @- ?  k: [
   }
1 C0 j1 q# I8 _7 v6 g% f2 X) V) y& y; [4 b4 I
   if(lParam & GCS_COMPREADSTR); |4 L* I1 n1 |, G" T& E
   {$ C1 p5 S$ @% k3 R
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));* f0 e& }; ^. s6 a* h/ S  N
       dwSize /= sizeof(TCHAR);
; ^: T5 F3 ?- p        szCompStr[dwSize] = TCHAR('\0');
1 j7 O2 Y+ I1 r- ]3 t! [    }: l$ I, N: q; I& z1 Z
& r5 B5 f$ I* u: ?9 J
   if(lParam & GCS_RESULTSTR)
6 t4 a) @/ J& L0 L2 `5 T    {
- ~, J* W: {2 E# }; V        // 取得輸出字元
- e' N$ I9 F( x7 \        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
" Y& @/ k) O% Y# n! `/ W/ L8 @        dwSize /= sizeof(TCHAR);) l/ u6 i% A2 U4 w
       szChStr[dwSize] = TCHAR('\0');. T+ \. s. P; z5 l
       lstrcat(m_szLineStr, szChStr);5 n6 j! U: N# x* |/ a# x7 v
   }5 O1 y5 r: G: F$ d& }2 ?
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 11:36 , Processed in 0.019496 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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