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

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

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

/ y) L& Y8 ^6 `/ ~" X( `// 輸入法設定狀態! R! O$ g2 a& A, E
HKL hkl = GetKeyboardLayout(0);
" ~) F7 T/ H: |if(ImmIsIME(hkl))
( R' M( d6 b( E4 I{
3 |1 L2 u7 X% n7 ^. S) R( {    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
& ~. l7 Q: j' `2 I    if(IMEFullShape)% E7 N  C* n' ^+ X
       sprintf(IMEShape, _T("【%s/全】"), IMEName);
$ t1 V7 c6 U2 J    else  t& @9 I% Q6 O  U3 ?
   sprintf(IMEShape, _T("【%s/半】"), IMEName);
7 A9 m: y( |( F/ |}  Y( c# g2 n; s
else
$ W: r1 w2 ]: v8 L( F1 X8 F{: [+ ]. @6 g8 D. n+ U6 ~
   strcpy(IMEShape,_T("【EN】"));
- a. I* P4 N+ I. }- X}, C& o8 }: k. M5 @$ E$ Q
0 P0 C" d/ ^7 x, C
// 當中文輸入時
3 G" A- E5 j& s5 I2 ~  M; Qcase WM_IME_COMPOSITION:
, O7 B2 i; S9 i/ O; T    hIMC = ImmGetContext(hWnd);
0 L, F& S* D2 X2 a! `    // 取得中文組字7 w! F# T# T, a0 M; U
   if (lParam & GCS_COMPSTR)/ P' P0 N5 Y# Z
   {4 Z: n* p! ~' |2 q
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
# p* k- l/ |3 P0 C) K' Q- g1 z        dwSize /= sizeof(TCHAR);9 _2 m2 k) O: O5 L" g) l9 p7 L" G
       szCompReadStr[dwSize] = TCHAR('\0');
! `# Q8 I* C& k: P    }
* ]& }0 ^1 q9 V2 H- i
: l9 ]. {# O8 B/ s    if(lParam & GCS_COMPREADSTR)
& H, z- h' s" Q/ D    {& z9 U- D0 ?) d% d; D
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));* V( a$ d! `; B; d) Y7 r8 X
       dwSize /= sizeof(TCHAR);
6 b, R( s% H' V4 k8 [7 t( C* B        szCompStr[dwSize] = TCHAR('\0');
) |3 q6 d" c+ i- b    }
, A3 u" l# @' H' \  s6 A  o" o$ k, i7 x2 A3 v0 v
   if(lParam & GCS_RESULTSTR)
) l$ P' i( L( e2 |+ y! a    {7 T, @7 p$ M, A5 I* e3 H
       // 取得輸出字元
! a2 j; o9 Y  z        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));* ]& d' E0 M* x* |
       dwSize /= sizeof(TCHAR);
8 J- U  S& T) J( i        szChStr[dwSize] = TCHAR('\0');! ?4 G' O9 a( `" O* v- l
       lstrcat(m_szLineStr, szChStr);( d9 s8 O2 s. l1 @& U! y
   }- k/ I/ i2 |: w& [, s
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-15 08:55 , Processed in 0.018191 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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