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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
4 a; v& V  o5 ~, Z- ?+ V9 w3 }+ M. B% t  a
// 輸入法設定狀態# h% k7 S( X* s2 b1 t, K
HKL hkl = GetKeyboardLayout(0);
2 {1 @+ h: n. y' Xif(ImmIsIME(hkl))
# a8 u3 Y) U5 [1 v{! x9 ?& @9 x( u: ]
   ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
3 G" `# G  q+ T3 b    if(IMEFullShape)" k6 y0 q4 \* ?4 |7 ?& R# _
       sprintf(IMEShape, _T("【%s/全】"), IMEName);
4 K; F+ B7 i1 V9 p0 R    else
. [! r0 Q. s, X% c! L4 o3 C    sprintf(IMEShape, _T("【%s/半】"), IMEName);9 y- i" m5 c# ]" ?& A2 x
}2 b7 Y3 T6 G) j$ C
else' n! r, @9 A% ]' R8 |* H
{
( N; P4 g# }$ o3 Z    strcpy(IMEShape,_T("【EN】"));
. ?+ A- V9 A2 ~% B) |9 W9 g  v}# g" Z1 J( s6 j3 r' i* `0 G8 ~+ `

' m; T( M$ p' ?& E7 s  g! p// 當中文輸入時
: x5 a0 p8 n' t% i' E. Scase WM_IME_COMPOSITION:
9 q+ ^; f0 \* `+ f7 p+ P    hIMC = ImmGetContext(hWnd);- B) G+ `8 H" Y1 v+ W1 S
   // 取得中文組字
. D6 w. z8 P' r: y4 v) w% g/ Q  y    if (lParam & GCS_COMPSTR)
, x% z! i. L1 u' A( Z% L    {4 [3 z4 U0 H% S( [8 z2 z" G
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));6 a- M3 M+ O' M: }' L1 f
       dwSize /= sizeof(TCHAR);% R" f  _5 M  r& w9 B# Y
       szCompReadStr[dwSize] = TCHAR('\0');
# S* L$ b. F* o: w1 d/ P    }; g4 E* U1 H4 T, x; c  r
5 d3 X  [& ^  z5 J
   if(lParam & GCS_COMPREADSTR)+ r( P$ k* w! B
   {
3 W. a/ I! O7 ~% H3 z# F: r5 L        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));* U( T) x$ T) s% j. K# Q& S
       dwSize /= sizeof(TCHAR);1 _. @$ I% y+ c# p
       szCompStr[dwSize] = TCHAR('\0');
" v0 n) H( B! D    }: D3 x; T/ }8 o/ Y1 |

% G$ Z4 @# I4 I5 D    if(lParam & GCS_RESULTSTR)
6 M( s1 K" O1 h( b- v    {
2 G& T% m3 y, F2 p        // 取得輸出字元
- F$ s3 k) P' ]! E9 n        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));  ^- x7 N7 K$ g" Q
       dwSize /= sizeof(TCHAR);; m. q- f/ J- S0 _2 s; A
       szChStr[dwSize] = TCHAR('\0');+ s  L) K, @& I1 Q% P
       lstrcat(m_szLineStr, szChStr);% c( _' f4 B' Z9 _& P1 N" S( k
   }
# l! J& z. E! G" j    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:06 , Processed in 0.020999 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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