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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
! R( z. X* f" P4 _# Q2 K7 }6 M
/ \0 S. m. S$ F// 輸入法設定狀態
4 B* d( a: ]( p/ z; QHKL hkl = GetKeyboardLayout(0);
. W5 }5 x2 a* A- @if(ImmIsIME(hkl))
$ G9 E) ^$ u% Q* V{3 C# d& z" y+ d4 g9 E3 t' J2 t+ d" H3 U
   ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
" s: R6 t% r% m    if(IMEFullShape)! \. s3 p1 t0 X
       sprintf(IMEShape, _T("【%s/全】"), IMEName);
5 V& G) n% B) d    else
! d  \$ v% D! h' ]    sprintf(IMEShape, _T("【%s/半】"), IMEName);
* [7 x* s! h4 `. Z, U}" V+ F  }8 y' z
else% z/ d8 U3 I( [4 ?6 C( T/ D
{
. d, P- K- f9 a: u- w    strcpy(IMEShape,_T("【EN】"));. d) O7 N* t5 u. F  g5 a( z
}3 U4 o8 F( j2 }; j2 p
5 C  M7 F- O) e0 R3 ?: R/ E' V
// 當中文輸入時! a3 f# a) V( P
case WM_IME_COMPOSITION:9 n( D, O# ]3 ^: j- f: E
   hIMC = ImmGetContext(hWnd);9 \" T7 ?: h( E" A4 {7 E5 f  z
   // 取得中文組字
! X1 N& k9 Z) t7 Z$ q    if (lParam & GCS_COMPSTR)
4 N( i. c) g+ ]( T& p5 v    {- w. C/ A( @, Y; b: a
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
% I( O5 ^0 e/ x+ a" Z; Q        dwSize /= sizeof(TCHAR);
( z0 q3 N# V* O' U        szCompReadStr[dwSize] = TCHAR('\0');0 e8 ?8 T0 F8 N7 e  w' |9 S
   }
  g7 D/ e" ?6 N* N+ W9 J
; ~. Q) G3 C0 w  s, f    if(lParam & GCS_COMPREADSTR): w6 {5 x& k' N( k) _" O
   {
. F* Y/ G9 C9 A: E) ~5 e' k        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
' m; H( k$ F% h% X2 d( V) l        dwSize /= sizeof(TCHAR);
7 B/ S( F- r, p6 e2 k* |+ L: I+ Z        szCompStr[dwSize] = TCHAR('\0');
3 ~% T; C2 y+ G+ I0 Q# |: l    }- ~" c- o9 t1 W* @& Q9 z

' S8 _- t' X$ n0 X9 H    if(lParam & GCS_RESULTSTR)% H  S+ q3 C) x
   {4 M6 F- y% ~4 N# s
       // 取得輸出字元9 x2 H) K& W! L# d" B! ]
       dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
! d) _: ?# ]) S: g8 T2 r+ P& [        dwSize /= sizeof(TCHAR);  K, x( Q  r) e7 {# T' @% D% J
       szChStr[dwSize] = TCHAR('\0');
! h  d. w' g7 @& p2 k- O        lstrcat(m_szLineStr, szChStr);' _! Z$ |. U3 f8 t3 D- V
   }  p0 }0 o% A8 q1 ]: v; s
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-15 11:33 , Processed in 0.021230 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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