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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip, n- `3 R& B) H

5 E7 O# S, U. F// 輸入法設定狀態
# @4 |+ c' d1 I/ I, N2 lHKL hkl = GetKeyboardLayout(0);: l6 U2 x3 p, f' r
if(ImmIsIME(hkl))
) C& ^, {6 F0 T! P  P( [4 H{1 E' g5 G, s* }9 l% q
   ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
7 j' F% R# [! |5 \' H! c5 c    if(IMEFullShape)* w7 S# w% K3 z0 {$ X& A" d
       sprintf(IMEShape, _T("【%s/全】"), IMEName);( i& f6 J- h5 J) s4 g( C3 [
   else
9 w" P' g& u+ b# T. {    sprintf(IMEShape, _T("【%s/半】"), IMEName);
% H) _4 h1 X* _4 U5 a& G}; U. K$ O+ s! C6 n; Y
else
- t0 O5 b0 M" S{
  \, ?9 u3 Z/ a: E, Y. W    strcpy(IMEShape,_T("【EN】"));
' K" ]7 w2 w' w) k& v# P}6 a% f6 }# A. W$ H8 Z! y

+ a( W) y3 P( P0 o  V7 ^// 當中文輸入時
( Y) w" ?$ @9 ?/ L7 F' j  o7 u; Lcase WM_IME_COMPOSITION:: G, M" ^2 `9 H' z2 \6 B
   hIMC = ImmGetContext(hWnd);
: @0 [0 T$ q/ ?& J7 y, J9 b" b$ Z/ W    // 取得中文組字
" |4 ~* ?; j7 H: Z* Z4 {; r- ]8 V    if (lParam & GCS_COMPSTR)
% F2 b6 K- A3 V8 g    {" l  J" W, R1 j( h$ a3 V
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
- M! j  u; h" d- o        dwSize /= sizeof(TCHAR);1 V" B4 L8 U0 \. X0 a" H9 O
       szCompReadStr[dwSize] = TCHAR('\0');
$ N2 [, k% n: H1 \3 l3 ?. h- C    }0 p9 ^( I' [  J+ k

5 P5 x+ L* I) x' h+ k( c8 }. }    if(lParam & GCS_COMPREADSTR), R' o2 Q6 F1 O9 |: Q
   {
/ T" Y6 H1 ~4 F/ @+ _2 ~5 q$ [        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
  m  g/ u; u9 J6 h1 p        dwSize /= sizeof(TCHAR);
0 x$ w/ v( M5 q1 S9 J2 H4 K        szCompStr[dwSize] = TCHAR('\0');
; Q2 ?/ n+ k& w    }; ?% a, P+ o4 w+ w( s; E7 H- q' q

; L& t, K' m6 y) k: O    if(lParam & GCS_RESULTSTR); A2 j4 b! }; _" q( z8 ?
   {
7 |) h6 s2 ~, p. b# G/ x; ?0 d        // 取得輸出字元
. |  E$ ^  ^% S  A0 g7 S1 L1 \        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));  ]1 x; G" l' L6 x$ v
       dwSize /= sizeof(TCHAR);
/ l4 ~4 q9 O) S0 v( O* z! D        szChStr[dwSize] = TCHAR('\0');' ~3 n: v" Z& l! o* }
       lstrcat(m_szLineStr, szChStr);  \" l' ]5 t) O$ L# v
   }
5 J! W2 O# |2 }) P6 p, g/ N    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-14 01:13 , Processed in 0.017648 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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