找回密码
 注册
查看: 6265|回复: 0

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
, \3 s6 L/ @2 P* _( d/ Z0 c2 B& @0 T0 ]' V
// 輸入法設定狀態
# F+ B% u- O3 W" i5 z$ J9 YHKL hkl = GetKeyboardLayout(0);' X$ {# b, D4 [, K
if(ImmIsIME(hkl))/ m& _5 J* W# z6 a/ f
{. a6 \2 a: H* M! N6 n
   ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
3 M* I3 h+ d% Y* y! {! T, m  B    if(IMEFullShape)
2 O4 q; C( L+ T: a. R        sprintf(IMEShape, _T("【%s/全】"), IMEName);
& Z1 _% ^: z' y1 q    else
9 Q" h5 r$ b* ^6 v    sprintf(IMEShape, _T("【%s/半】"), IMEName);+ g/ W5 T' h+ {$ x
}, d4 P4 Z; E) Z4 [) y# F! T6 I& |
else& J, x& h& }0 X0 E/ M
{6 q3 K: j; V! }
   strcpy(IMEShape,_T("【EN】"));2 y& N- W6 }& P) r! w& _* E5 n
}
. L& w3 r; O; r
9 [, L) e& P8 d- s; H. C// 當中文輸入時/ ^0 C+ X2 o- m4 J3 x# e
case WM_IME_COMPOSITION:
; o8 N% Z4 E$ q1 K! p6 v1 M1 m    hIMC = ImmGetContext(hWnd);
0 ~9 G2 m% P$ a' k4 ~    // 取得中文組字, s% F9 \/ E7 o# s' l5 A. m
   if (lParam & GCS_COMPSTR), k/ G8 ^" `: V! F
   {' I% T9 P/ P6 k# |  K
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
' g4 r8 o* u* C+ m        dwSize /= sizeof(TCHAR);- P  {+ g  t. I4 F. d; S+ t1 A
       szCompReadStr[dwSize] = TCHAR('\0');
8 I+ ]6 V) k. ?2 W- e5 q/ c( @    }
& _8 ^4 J, t4 V$ L" }' y7 n- z
8 Q3 o" s, A$ \, R& y    if(lParam & GCS_COMPREADSTR)
2 ?4 M$ m0 c5 z3 g6 [/ N    {
1 t$ Z1 w2 O- o0 M" L! M        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));; P3 o- y( f  p- \
       dwSize /= sizeof(TCHAR);
  e( c  s+ B4 z% [* k        szCompStr[dwSize] = TCHAR('\0');' j- n6 Z( w# i2 m* ^) v* P
   }/ _& e- d1 b$ H5 I, d+ u
3 j7 F& Q: Y* c! k/ h
   if(lParam & GCS_RESULTSTR)0 Q5 C5 W* ?: x  y2 t
   {0 Q+ Z/ X- u( e% K9 s
       // 取得輸出字元
1 g0 }: L: |9 F: M4 q2 D        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
3 [4 j+ t. Z# a        dwSize /= sizeof(TCHAR);
5 D# w$ G0 o  o/ E; c        szChStr[dwSize] = TCHAR('\0');
* n4 }* ~2 ~7 B) W. Q        lstrcat(m_szLineStr, szChStr);# n' m) ]( C+ L8 \& J4 M- y( S1 J2 \
   }
* G) |( M. g% e! |' B" ~6 W9 O4 ~    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 00:12 , Processed in 0.017164 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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