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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip% G" z% Y5 p: B* \+ b5 _

% v6 T* u, d: S// 輸入法設定狀態
& {: c7 s8 _, P5 f. O; `" d- \1 oHKL hkl = GetKeyboardLayout(0);
0 {8 [9 ^! e3 H+ n: `: C8 x% H* Fif(ImmIsIME(hkl))* p) q  `  m) s. E5 Y: y
{
; m0 X7 d4 M5 O3 p; L    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);' c& l; |4 L% p! H, o* n5 O/ c, K% C
   if(IMEFullShape)
6 O& z# ?! t8 ^. s' j5 o% I, ~. e4 w$ _        sprintf(IMEShape, _T("【%s/全】"), IMEName);- o+ w! [$ L* E* W9 t
   else) q" i3 M" p5 l+ D. z
   sprintf(IMEShape, _T("【%s/半】"), IMEName);
# ~) M3 \6 Q6 e% \; O% N' F# w/ a. y! l' B}
3 J5 k: l, q$ Melse, r: l+ W3 m: ?" Y
{
0 T1 \2 z3 B! O! L3 S8 U$ u    strcpy(IMEShape,_T("【EN】"));
& E( M: Y" m2 i9 Q- ]: i}
1 G/ w/ y' Y! l; ]/ f6 c3 b+ x  g& K0 g6 q  o, r
// 當中文輸入時
$ d6 S9 Z( ]- kcase WM_IME_COMPOSITION:0 S' J4 E3 @6 W, z& h/ e4 P
   hIMC = ImmGetContext(hWnd);  A3 s3 I% t: s$ T: [5 g
   // 取得中文組字
  b* f, O; w6 |  P) i7 S$ [    if (lParam & GCS_COMPSTR)% B8 n. V( J8 {& Y; d
   {
. J0 \# y: J7 `: t* g        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));0 Z* {  L2 [/ A6 y2 b! k5 m& c! X
       dwSize /= sizeof(TCHAR);
9 H; [, W% G% k  z, `" J        szCompReadStr[dwSize] = TCHAR('\0');
6 \- E( C7 {  A2 Z; Y7 L2 X    }+ V1 K  J! P8 s# |

8 o' U3 C+ I% R' `. ^4 {    if(lParam & GCS_COMPREADSTR)# T% m8 P7 Q" t: x
   {
, {; I2 [/ ~1 S0 p- K' L        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));2 t2 |) W; h* _2 M8 h$ s) A) t
       dwSize /= sizeof(TCHAR);
2 @, j* x& k* n6 J        szCompStr[dwSize] = TCHAR('\0');
0 G% o) w: f0 F- u    }" ?) h7 j- }$ L4 s7 C
9 k. g/ Z2 |; V$ _2 T; ^, i5 w; z! y
   if(lParam & GCS_RESULTSTR)( Y) o' H" [& T
   {
" ?1 }/ x9 q6 K, ^# }8 o        // 取得輸出字元
# Y, ]8 C3 j9 t0 g7 `' x( I- s) j        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));+ C0 r- t5 Y  I! T1 {% B) K8 X
       dwSize /= sizeof(TCHAR);
/ z# b+ y" }, K7 O6 V        szChStr[dwSize] = TCHAR('\0');
! A) O0 G: `' V. ]4 D/ k, b        lstrcat(m_szLineStr, szChStr);
$ A/ {- a0 f3 e, D* t    }
4 I4 O9 B. J+ D! w3 m! Y; e    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-13 08:27 , Processed in 0.021130 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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