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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
1 d+ K/ q: t' x, a, D  D/ |/ m* y* \; B5 E+ t0 }9 G9 @
// 輸入法設定狀態
, b/ g- l9 G& {0 gHKL hkl = GetKeyboardLayout(0);' q/ U8 B/ ~1 T- t  E7 s) @
if(ImmIsIME(hkl))
) o9 }1 x. I8 j/ s{1 |) l, C' |* B; H. {3 P. p
   ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
/ G  ?& z' C/ Y  y5 E% I. b    if(IMEFullShape)
/ m" X( M0 [3 q: {        sprintf(IMEShape, _T("【%s/全】"), IMEName);
7 i! D, t* l% d2 R$ o# `7 h    else1 }! ^' e3 {; k' n9 F, J
   sprintf(IMEShape, _T("【%s/半】"), IMEName);
0 O" F3 h8 Z3 _  s! ?, f, H+ X}
# ^8 X2 F2 H4 C- p' @# ^" kelse2 j7 K% J4 k3 p+ F
{
0 w# O' _3 Z9 L# T+ b    strcpy(IMEShape,_T("【EN】"));
1 o8 \5 E' ]0 l" ?( `8 N}" e$ O  Y, h1 j' t
- Z# @4 U4 n9 r" N( K" h, k4 K
// 當中文輸入時9 b" X1 P. R% q$ i  o! K. a
case WM_IME_COMPOSITION:
4 [) I/ X$ h% ~9 p' u, K9 o    hIMC = ImmGetContext(hWnd);" F* V4 W. U6 Q  y9 }% r* D
   // 取得中文組字
6 G4 l5 V, ~0 c- E0 W    if (lParam & GCS_COMPSTR)
# C1 ]4 J; `+ [' V: X: T    {7 N2 g. N+ ^) e
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
5 ^: L5 o4 g& r/ S- Q. w        dwSize /= sizeof(TCHAR);
* _* m9 D- x1 h5 b) G1 b% {        szCompReadStr[dwSize] = TCHAR('\0');: [. @- z) n$ r8 y+ ~
   }
- `; w" r$ g( |! }% \' r6 z) o0 d3 a+ X7 B
   if(lParam & GCS_COMPREADSTR)/ l. b9 F. A2 ^# u' f
   {6 u) D+ I( J6 A
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
1 e+ L) x6 L& ~, H4 m* ]. D        dwSize /= sizeof(TCHAR);$ \/ s$ F" Q: ^" g
       szCompStr[dwSize] = TCHAR('\0');! R, d" b. f( q; `
   }
# _4 x9 n, L" I/ F2 X0 O6 K$ M2 Y8 V& t+ i9 E# ~# a, p1 p
   if(lParam & GCS_RESULTSTR): M9 G" ]& e4 w3 }3 ~" x
   {. C( t) H$ ?7 u8 C0 \8 [
       // 取得輸出字元: v# M0 ~8 |! H) ^0 g
       dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));' ~# O" z3 p3 ~% A
       dwSize /= sizeof(TCHAR);
# b" \/ W/ K8 v$ A8 l        szChStr[dwSize] = TCHAR('\0');
7 s# {/ A8 X! r6 B        lstrcat(m_szLineStr, szChStr);
$ Q5 f0 k; L& q) z8 F3 Y& X) R    }* @' B8 D" P0 c6 t  Y- K7 X  x
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 03:26 , Processed in 0.017133 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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