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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
0 L. c  k5 `3 U* y4 u
- a& w5 ^; F4 ~& _: q// 輸入法設定狀態! r8 \# U1 \+ M0 R$ A
HKL hkl = GetKeyboardLayout(0);
6 @9 O% z/ i, P. @- h# K: oif(ImmIsIME(hkl)), W6 x: v! h! R
{
1 ?5 u$ y# u! k, i+ i3 p$ R    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);* J: W0 c1 W) S$ V- u/ t  Y( ]
   if(IMEFullShape)
+ l5 [8 `/ h  N! ^        sprintf(IMEShape, _T("【%s/全】"), IMEName);
8 z4 u4 x; T5 g" l+ _1 ^" x* y, T    else
; g0 R. L$ ^8 W/ A9 J4 o" B    sprintf(IMEShape, _T("【%s/半】"), IMEName);
0 W$ K, K7 s& u$ ]}
. ]0 v) h& m0 S+ |else
7 C* D; v) f* k{
9 W( j  b! Z& Z" Q2 L5 G( ?    strcpy(IMEShape,_T("【EN】"));! T2 N) Q+ N; j- _
}: \2 Q" t6 W- f1 B

, ]; v+ A. R' p. j' I// 當中文輸入時6 @  x5 H4 T: e1 l, c' t9 W
case WM_IME_COMPOSITION:
, R1 U# Y1 M+ D" h; @$ ]2 j    hIMC = ImmGetContext(hWnd);
/ l5 R: G) S0 c: W    // 取得中文組字3 s; E! W5 h9 @% x- g/ x- G3 c/ y
   if (lParam & GCS_COMPSTR)3 k0 K7 l/ [1 y8 B* _1 m7 [  F
   {
" X* B2 ]+ q+ R) D% D7 |. v) \$ C        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
: E! ]8 T1 l: s3 J" F        dwSize /= sizeof(TCHAR);7 _3 ]; y3 [4 c: N, ]) n$ L
       szCompReadStr[dwSize] = TCHAR('\0');
. ^) @( c$ u; L/ ^/ u    }
1 F0 j+ {; ~  ^2 D* ?: d
" U4 s0 a0 T" W# Q, Y8 R4 `    if(lParam & GCS_COMPREADSTR)
0 b% N' N# r: T( w" v$ X* S* C! {6 a    {
& g% B4 S" ]5 Z        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
: E7 D  E7 X. U6 p        dwSize /= sizeof(TCHAR);0 [9 N+ O4 G' }2 \2 E
       szCompStr[dwSize] = TCHAR('\0');
/ ]- \$ E) s" a  G# j    }
# [/ {4 c$ u3 k& x% D" X3 [- H, l( M' x
   if(lParam & GCS_RESULTSTR)
) j" n. _# _1 u* Q2 x& Z& Q    {9 `/ `  a% _8 }
       // 取得輸出字元1 Q9 U( A7 z+ ^5 T$ X' z1 Z- e
       dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
3 e& g4 M. P8 Q' \3 ^; g        dwSize /= sizeof(TCHAR);
9 Y/ x/ @* _) N2 o. E        szChStr[dwSize] = TCHAR('\0');
% t& \% j0 U5 e0 W% E1 E        lstrcat(m_szLineStr, szChStr);
! ^* x0 ?: T: X) l1 [8 b    }
4 u1 K* I/ ?! p0 s  B7 m" x" [6 z    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 10:22 , Processed in 0.017912 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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