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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip0 c1 E7 [4 v: K3 z1 p: P
( j; _& k8 o9 [2 |. n' B- G
// 輸入法設定狀態
$ x* d# K* t2 L0 k/ l( x: }- EHKL hkl = GetKeyboardLayout(0);
5 `+ |  A9 k# d9 v8 Sif(ImmIsIME(hkl))+ R/ }, X0 z/ |5 J
{
+ F4 B0 \9 B5 o% S; Y    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
+ I0 k8 Z+ T1 w0 b7 X0 ~: ?; z; x    if(IMEFullShape)
$ G! u' ?- V! o        sprintf(IMEShape, _T("【%s/全】"), IMEName);
& y& u+ w# }# f& K    else
0 b% y1 _+ H! F2 W/ U  S* }    sprintf(IMEShape, _T("【%s/半】"), IMEName);1 G/ ~  B: N% I3 I1 {; D& H
}
' J5 Y1 q4 t* P2 Pelse8 w4 D9 ^5 M  k$ @$ h: X
{
0 Z' U5 o# w' {, M' T* m& S    strcpy(IMEShape,_T("【EN】"));$ t% j+ y( u% _5 |3 |
}
1 Y/ V7 C  l4 @3 K' S3 x; m- X* q7 ?7 o
// 當中文輸入時: p" i( @8 N% ]' `% r% p% H
case WM_IME_COMPOSITION:
+ @( {9 I, R* p    hIMC = ImmGetContext(hWnd);+ V4 H& z$ M) E+ Y
   // 取得中文組字
: m+ p4 W  Z% \1 t! f9 F3 W    if (lParam & GCS_COMPSTR)6 t4 q. o) \/ ^. @2 _
   {! t# b! ?. Z# {5 ~' V
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));% U0 u6 r! n4 j( I5 C
       dwSize /= sizeof(TCHAR);* C0 ]! f6 u; U$ K: _) W; G# h
       szCompReadStr[dwSize] = TCHAR('\0');3 p" H. C; M8 k" V. n. G4 B
   }
* x8 J- V) U+ w9 C* Z+ Y. E) l. Q- P$ `( u
   if(lParam & GCS_COMPREADSTR)9 r( d+ Z5 G; f( Q, q# R+ _
   {
) d9 F7 N3 ]/ u& s/ {        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
8 j. E# @9 X/ }1 j        dwSize /= sizeof(TCHAR);
/ }. x6 r$ ]  x0 ]        szCompStr[dwSize] = TCHAR('\0');
1 Q7 w+ t4 S& ?3 L  M    }1 z5 w" c( n- L- j! q
0 q; U9 h2 b- T" j$ g2 [- T1 v
   if(lParam & GCS_RESULTSTR)
8 r+ f2 O- A5 M, H    {( |- [$ b5 K1 A, o
       // 取得輸出字元
3 n. S" V$ J+ l7 `        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));* G* Z- S6 `* B1 s! N  H
       dwSize /= sizeof(TCHAR);7 j& i8 [( R: W. {1 _7 C6 |9 E$ J) q2 ?
       szChStr[dwSize] = TCHAR('\0');
8 J) U) c3 N6 ~  p1 t        lstrcat(m_szLineStr, szChStr);
, ^& T8 j) v9 g- N+ F  Y9 \/ `% f    }3 ~7 a. A% X2 w
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 23:51 , Processed in 0.017615 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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