找回密码
 注册
查看: 6263|回复: 0

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
" z; _' _  v/ p5 c$ M* Q
( Z4 _+ \  w) M0 b3 D// 輸入法設定狀態. e2 W( t" X0 b2 ~- l1 @# s
HKL hkl = GetKeyboardLayout(0);
; L/ \9 X3 I( ?9 L( jif(ImmIsIME(hkl))
' A; w* h: I' {' K, L; z. e{
2 _  w9 i/ A+ Z. O# }    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
6 d6 V- l" x' F% G3 ^    if(IMEFullShape)) J4 W( v; R+ y. G( A
       sprintf(IMEShape, _T("【%s/全】"), IMEName);
1 b& a; }$ D  q, v" `    else
, n$ M4 O# x4 c    sprintf(IMEShape, _T("【%s/半】"), IMEName);" F; I; w' ]9 {; u& \& M
}$ I6 g2 C# w5 o- C. I. P' Y8 M: W
else( ^8 B2 }+ N" a7 G
{
" {4 s# @' ?' c! ?! E    strcpy(IMEShape,_T("【EN】"));
( y, C2 @3 Q7 C; I4 t# ]+ I}& X& T  _1 V# d) t
6 B3 Q! S4 K0 a8 g3 L, H( I
// 當中文輸入時* `, x9 j7 k9 V9 O& A
case WM_IME_COMPOSITION:# d. m8 _$ X" S8 o$ \
   hIMC = ImmGetContext(hWnd);, o7 ~! U4 M& e' D; U* L
   // 取得中文組字
# ~# e( |9 p) `    if (lParam & GCS_COMPSTR)
$ N3 u3 A" f) b5 e0 N$ S    {& R0 X- _3 X  @
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
9 ~) z$ O4 M- U+ N, d        dwSize /= sizeof(TCHAR);& x- t. |- x$ i, f
       szCompReadStr[dwSize] = TCHAR('\0');3 p7 r" [/ \* S, H
   }  [  J% W; Z6 j9 B
& h! O. N4 }# x( K. g
   if(lParam & GCS_COMPREADSTR)
7 P% I& g9 s# o3 }+ N/ {) |    {
% C0 T- Y+ W' z3 X/ u        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
# k9 {. @  x3 {  E2 H8 p        dwSize /= sizeof(TCHAR);4 V3 D' d/ O# D
       szCompStr[dwSize] = TCHAR('\0');
0 K2 M* [. F/ M- r$ S, F    }
# c& [4 j* H$ T4 j* a3 D. Q9 D! F: B& O
   if(lParam & GCS_RESULTSTR)1 z' L- P# r7 T" s& ~
   {
- q# _8 H6 S- L/ f/ B( ~        // 取得輸出字元
0 @0 S9 b* B; C. k- ]- u1 q; Y        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));0 i% d# {* |% q  Q
       dwSize /= sizeof(TCHAR);* P* ]. [. i+ {+ ^, X- Z$ ]: N5 M
       szChStr[dwSize] = TCHAR('\0');
0 G( d( l9 h) g% m1 D        lstrcat(m_szLineStr, szChStr);# p9 z  a2 t0 [
   }
# `2 ~- y2 ~. K( ^    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-1 20:49 , Processed in 0.017563 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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