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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip4 z+ i4 U1 K% t7 e. y, _
# W- U$ w' ]" e9 m2 j
// 輸入法設定狀態
* B0 l& H% ^* H3 k% o# b5 nHKL hkl = GetKeyboardLayout(0);; O; E% n# }/ R# S
if(ImmIsIME(hkl))
: ?% X* N+ ?! }& z7 v( ?{" q1 x1 l  e% ]
   ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);; E* Z1 }6 R- L1 }, C, c5 m
   if(IMEFullShape)0 c) \' N. K) I" T7 O
       sprintf(IMEShape, _T("【%s/全】"), IMEName);& [! n( _$ A% L& R
   else
, j* h! G4 v* F* Z+ h    sprintf(IMEShape, _T("【%s/半】"), IMEName);) g8 b5 E, K' T9 s, x# r
}: c: {2 i9 _3 I# w8 W, l
else
1 J5 E% }8 f4 m3 H- w5 g{" l0 @8 G, o1 n: |
   strcpy(IMEShape,_T("【EN】"));
/ d2 b" _; K. Z; }. {- k# @}
0 ]! h; O7 Y/ u0 Y8 b6 L) Q4 z( T( ]3 u5 l
// 當中文輸入時
5 @  K0 `" v0 m2 {* e0 E- }case WM_IME_COMPOSITION:3 }5 p# `- X; G# k+ L' S: e$ R7 B
   hIMC = ImmGetContext(hWnd);+ _0 K: z/ |) l
   // 取得中文組字
8 s3 T  G; f' Z$ U1 c/ L5 O8 m    if (lParam & GCS_COMPSTR)9 Y: G! H* P- Q
   {
0 ]) P* Y! F  R+ z' L        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));5 T% {* G5 {; T  w
       dwSize /= sizeof(TCHAR);+ I) Z4 d1 j/ @
       szCompReadStr[dwSize] = TCHAR('\0');5 p: C+ O! B# N$ q- @- c
   }( S6 M+ [: w: z( E/ F1 l
& L) b" f+ I2 ?
   if(lParam & GCS_COMPREADSTR)
# V0 U; Q: c6 W/ z1 v4 S    {
/ |8 J8 z' ?; ?9 L        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));0 p5 m# J9 R1 o% j6 c" B1 K. ?( I
       dwSize /= sizeof(TCHAR);
7 }% A' |* T2 N+ w: z: }5 z, V        szCompStr[dwSize] = TCHAR('\0');5 y; z  K( e6 M* }
   }+ H& q5 {6 d+ ~# v0 Y
$ ~" D( o1 c8 O; [# G0 \3 |
   if(lParam & GCS_RESULTSTR)
* m$ m: z( U3 }. `    {/ I3 ]) ?# ~3 E+ s6 g. q1 r$ C; c
       // 取得輸出字元
6 f4 Q) b1 r" V. Z8 R/ I        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
# J( z& U$ Q. K5 [- {% u0 v# M! D+ M        dwSize /= sizeof(TCHAR);0 W1 Y3 k* o# G) `3 j
       szChStr[dwSize] = TCHAR('\0');9 W- }4 S' L% b% k3 |8 p, X
       lstrcat(m_szLineStr, szChStr);0 ^! X* R% l# G/ ]# c
   }
9 J, P* G& E, K! m- y* q4 G% Z    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-29 20:02 , Processed in 0.020713 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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