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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip" O, {/ C# X; r) k
# @- Z) p4 q1 k/ a
// 輸入法設定狀態) M$ l" W. _  p8 l% X
HKL hkl = GetKeyboardLayout(0);
% n3 E4 Y, {" e2 F3 N9 A: L1 fif(ImmIsIME(hkl))
: \1 `8 W% o) m+ A{
- a' `6 [! n6 [& q    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);7 P6 }- F: i! K$ a+ h0 ]! w
   if(IMEFullShape)# ]1 i6 q; j2 i# t( P( O
       sprintf(IMEShape, _T("【%s/全】"), IMEName);* _3 U- S3 g) t( F; }  k
   else
8 s# m8 ~8 w: e* ?    sprintf(IMEShape, _T("【%s/半】"), IMEName);: x' v# R; X7 q, P
}
6 r2 i. N$ L0 P, @% C- Gelse
0 B  t. j) z' H* P! `( A, C{* ?# p' c5 m/ A% k4 O7 t, R) e. a
   strcpy(IMEShape,_T("【EN】"));" s- h% g5 E* p- `/ F
}& N( d# Y  S1 Q3 M# [- x
% z% P& Y' U8 ]! @# b
// 當中文輸入時
1 _* e% A  m! g" k& _! h( l& dcase WM_IME_COMPOSITION:: x! |7 p7 A6 s1 Q1 k! K0 E
   hIMC = ImmGetContext(hWnd);7 l; W: W) t$ @$ S
   // 取得中文組字" w* j+ @8 f0 J- T9 Q
   if (lParam & GCS_COMPSTR)& F1 t; f$ Z( m" N; t! t% ~
   {0 `6 c, e: X3 N( \  ~
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));4 P$ [# b) ?9 H$ r! [8 ?% [& K0 z
       dwSize /= sizeof(TCHAR);
, Y0 V9 s$ I' o& l1 Q2 p( t        szCompReadStr[dwSize] = TCHAR('\0');
$ Y# e5 R( Y) |    }5 s; i; B' m% u4 Z2 F6 Z
/ @7 {7 W* X5 |$ ]8 i
   if(lParam & GCS_COMPREADSTR)
/ L% J# p. J/ h$ W    {2 e8 q9 L* S: M/ R, z0 P" _7 g) @
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
0 S0 }7 i: D4 h, x8 h        dwSize /= sizeof(TCHAR);7 u3 b9 x, @1 \  F4 Y
       szCompStr[dwSize] = TCHAR('\0');
9 _# f# I) ~0 y0 }    }
6 a1 W, ^% C2 P, o! D6 c8 G3 R  c$ ~! v( e6 N' S
   if(lParam & GCS_RESULTSTR)
) B9 P4 C$ A* [# b3 [6 T  C  c3 W5 Z    {: g6 n" D; w. W
       // 取得輸出字元$ @7 a* F' y% \( m- j" w9 _
       dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));0 U' ?5 _: D& V- e
       dwSize /= sizeof(TCHAR);( S1 p+ q1 I- n' }' U# P9 l( L
       szChStr[dwSize] = TCHAR('\0');
  ?' r. P' {& G, Y5 [6 U5 E0 G        lstrcat(m_szLineStr, szChStr);
' Z+ K" ~( f5 h    }5 |, r8 {; B* u0 }+ [% P
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 04:34 , Processed in 0.034371 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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