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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
$ O, ^# z3 \& C3 i0 E7 ]9 v4 c; e
// 輸入法設定狀態
; l) ~3 e2 f% j8 i, eHKL hkl = GetKeyboardLayout(0);
7 e) B2 o8 D' g/ oif(ImmIsIME(hkl))
! {* l/ a1 _# ]- Y3 d{
9 `1 n, |. T8 A  d' ]: _: ?& n    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);) ?! o9 g$ }) x- m: x: x
   if(IMEFullShape)  p8 R, @9 H; w! H; E
       sprintf(IMEShape, _T("【%s/全】"), IMEName);
2 P7 b, R- t2 d1 ]. i    else
" H* K3 j* B+ \% G" i    sprintf(IMEShape, _T("【%s/半】"), IMEName);
- c4 i  Q' c+ {: |) j( v% ?}
" B! ?6 x& |0 y0 P) F' Kelse
- t/ A: l! d7 `5 E{
, x& l7 e( Q, B2 f% H  L4 e# }    strcpy(IMEShape,_T("【EN】"));
  g3 z8 Z4 j, }: ]) @, ~/ u}' |$ [6 h# q8 u% `6 ?3 n7 S8 J: q2 D

+ n/ _1 q- J$ {' s// 當中文輸入時$ L8 o* n* O  I8 b
case WM_IME_COMPOSITION:" _  @# k' t3 o* m7 Z1 a
   hIMC = ImmGetContext(hWnd);8 \  `( P! z4 f% N# l
   // 取得中文組字
, l' Y, a+ P& L# K. D9 U. F    if (lParam & GCS_COMPSTR)
! ^4 A* Y$ M: _7 e3 T3 ~2 _  j( Y    {
7 s0 x# J, h- w: `$ U        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));8 O: N5 V$ K" _4 ^8 O1 |! F; z  Z
       dwSize /= sizeof(TCHAR);% Q* V) M/ O3 z$ ?& N
       szCompReadStr[dwSize] = TCHAR('\0');
3 f: V; x! V9 h& u( f    }: `1 t1 u7 q# ]5 w
; W; Y4 `; O" v* Q: ^
   if(lParam & GCS_COMPREADSTR)$ F: S/ X3 h1 j
   {- p2 q  z0 {' |* ?- y+ S& f
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));0 s7 ]5 q! ^$ |: W0 M
       dwSize /= sizeof(TCHAR);7 m% O! n7 `7 R0 g# |
       szCompStr[dwSize] = TCHAR('\0');; ^) c3 C  b" l, _5 J: p; x
   }
% C7 A# Q: f2 G/ z* f" H) a9 U$ A; u
   if(lParam & GCS_RESULTSTR)8 x4 I( _8 W" w' Z
   {
& {: |) o& o2 J" e: e; j        // 取得輸出字元
4 ~- G; V. s  r6 x4 K& H; j        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
2 q2 s5 p6 q8 u        dwSize /= sizeof(TCHAR);
( d& f0 [! `, o        szChStr[dwSize] = TCHAR('\0');/ B3 M4 p' O0 Z8 U- i' i4 E0 M, O
       lstrcat(m_szLineStr, szChStr);* H  Q' v, q& l8 w; Z. ]# k* T
   }% K1 e% @0 S9 [' u* z, b$ N4 _& ?
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 09:27 , Processed in 0.014078 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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