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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
; L# f. E4 l. o# G1 A  f& `
5 X9 v- N% V: `' Y, a9 @; W// 輸入法設定狀態8 o0 x% ?6 `7 q
HKL hkl = GetKeyboardLayout(0);
) n+ s# u* ]1 C. e& Lif(ImmIsIME(hkl))" v2 q8 F' ~6 o" Y% Y
{/ B' v- }0 |9 l, \- a0 K/ J! K$ B
   ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
7 q! e3 l$ ]( l0 u1 p    if(IMEFullShape)# J+ z- {8 ]0 D, o3 y$ o& X4 _
       sprintf(IMEShape, _T("【%s/全】"), IMEName);
9 b. r* x1 g5 [4 B) J; p    else/ h8 s9 t$ b- a4 k& w2 R' }; h
   sprintf(IMEShape, _T("【%s/半】"), IMEName);
* `8 B  a8 w4 F+ ~7 B( k}8 g6 U) }/ |* B8 V) `/ M
else: g5 ?8 ]# p; \$ J- i% |
{5 m& p, q7 j5 ~
   strcpy(IMEShape,_T("【EN】"));
: D7 K- J. q( p4 v5 o3 U, Q}
* u3 p$ p3 e% |- k, p. e
# P8 y9 z* O6 q, ?' f4 D7 a// 當中文輸入時
! c) c: `+ _' d8 S6 D; X2 Dcase WM_IME_COMPOSITION:
) u+ r8 v  v: T    hIMC = ImmGetContext(hWnd);2 d7 Z0 T! Y+ N( E% ?
   // 取得中文組字
; Z) r6 W$ y, m    if (lParam & GCS_COMPSTR)( i; o9 i' h8 O& w4 |0 _8 |
   {
) s+ A) p- p: b+ m: p        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
) }) |$ e, U& a7 [        dwSize /= sizeof(TCHAR);2 M! w+ l+ v% y" ~% v! ]9 {; T
       szCompReadStr[dwSize] = TCHAR('\0');
" K' V' c# Z1 l    }
, ^' N; _: d4 ?. H+ t) W' `5 l* ^* P  s/ z7 K
   if(lParam & GCS_COMPREADSTR)' }. J8 i$ c) n8 N/ E
   {: H% l5 c( m$ H# z# \# [  Y
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));5 U$ s9 G5 o3 e6 Y2 F& Z" |5 ~
       dwSize /= sizeof(TCHAR);  L! G" Q$ s8 o4 C7 I
       szCompStr[dwSize] = TCHAR('\0');. ]) _1 m) C9 t, b7 \2 o9 a) o' h
   }& c: H& B2 u# P* B4 c& K
+ p0 D2 p2 d4 n; @4 t
   if(lParam & GCS_RESULTSTR), @* b# a* u2 x7 G3 S% j
   {
  e" C9 K$ D+ C2 o        // 取得輸出字元
' J; Z/ e& v; I2 t/ g) `7 x, n        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
. n- W5 b; a5 J- k+ c4 P4 r        dwSize /= sizeof(TCHAR);
( Q  k+ s+ q# X2 e5 }6 g$ H$ C& _        szChStr[dwSize] = TCHAR('\0');0 t" Z6 m* b% c/ ^5 k4 j
       lstrcat(m_szLineStr, szChStr);: }* E" a4 ]( ~  j" C7 B6 X3 w* b
   }
( T" ^. u* m! `% c    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 09:06 , Processed in 0.014243 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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