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

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

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

- g  [, _# F- J9 Y# z// 輸入法設定狀態3 y: a; R/ D) m0 z
HKL hkl = GetKeyboardLayout(0);
& x; A# Z7 V& q( H# hif(ImmIsIME(hkl))
  u4 n/ Q3 [4 f$ Y{- n" w2 J2 P' j* d; S
   ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);; ?0 ~0 h8 D: a9 E
   if(IMEFullShape)
6 t3 J& T" x9 R, i2 J5 |! i+ C6 b        sprintf(IMEShape, _T("【%s/全】"), IMEName);; ~5 ]& B4 K* |6 Q- G' C) D
   else. U7 O3 W9 _1 Z5 o
   sprintf(IMEShape, _T("【%s/半】"), IMEName);
9 \+ o4 Z' h/ F}, [$ b. \3 j' N) {
else% ?8 d2 K) C! e
{
& P/ r6 d  t; g) J; A$ Y    strcpy(IMEShape,_T("【EN】"));. B+ \0 e, q' Y" \: B: c
}/ F# P# `* ^2 C. D  T- `& f
, _8 o" Y( a/ h2 B6 V
// 當中文輸入時9 W9 Q1 M* y4 p2 L
case WM_IME_COMPOSITION:
3 P5 U3 [9 n& M- k7 r    hIMC = ImmGetContext(hWnd);" W2 W4 U. \7 M
   // 取得中文組字& o$ b  @: X& \0 k: s
   if (lParam & GCS_COMPSTR)! ?! R% H, {! k, l. B! |/ P
   {& U" A$ V  i9 H5 l
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));! T5 N, \3 L9 T/ h& R  s6 H# G
       dwSize /= sizeof(TCHAR);; ?: q, m" K7 m, T7 Y- g: n& N
       szCompReadStr[dwSize] = TCHAR('\0');1 J; ?; s, l0 q3 ]; |' M
   }
6 I2 C: D$ p9 b& u9 Z
* N  r: R3 ^6 r7 b/ z( a) y( x; B    if(lParam & GCS_COMPREADSTR)
3 H* X; X. [# L; N, t- x: ?    {! j# _+ m: q! ^4 h3 u/ B$ {3 P
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));8 W  P/ t; }4 Z$ B
       dwSize /= sizeof(TCHAR);9 Z$ v/ b: t3 T0 }8 a, c5 @7 e
       szCompStr[dwSize] = TCHAR('\0');1 n" H& C. X# N0 a* m' @
   }
# y+ \6 I6 n, o" o  B) m, {6 H  Z& M
   if(lParam & GCS_RESULTSTR)6 P4 w4 l$ L6 S
   {4 g: p; j  U0 Z8 S. M! H; N
       // 取得輸出字元
; F* Z2 }# S% J9 |- B% Z7 t+ Q        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));- |* E) p7 n( X( B
       dwSize /= sizeof(TCHAR);3 u2 Z6 T  i. O+ r1 ?4 a  o
       szChStr[dwSize] = TCHAR('\0');
  c3 P7 G6 k( Q. t7 g3 S        lstrcat(m_szLineStr, szChStr);
( A, V/ `' x" }# C" p1 w) |    }( e* U5 Y/ A; B% ^' [( q, w6 N
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 04:42 , Processed in 0.014294 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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