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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip% }" f: w$ w- d# u7 U0 O

- o- `, Z" U, N0 B// 輸入法設定狀態, `" r5 J! S" M
HKL hkl = GetKeyboardLayout(0);
; X, i! K5 U: R: B0 A9 l# zif(ImmIsIME(hkl))
9 B! E3 w9 i$ j3 f& S& w6 ]( O{
  P. k5 s2 w) {8 y+ A( X3 b& p    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);, m2 O# z) x! c& b( ~/ K# j
   if(IMEFullShape)- i. X4 ^. `; Z0 m1 d/ n
       sprintf(IMEShape, _T("【%s/全】"), IMEName);
* b# v5 c) b, t: N3 p" J0 r    else6 Y, z/ R! r1 A; p9 l) q3 i* ?
   sprintf(IMEShape, _T("【%s/半】"), IMEName);
, v: _& q  ~/ `6 P  ]3 p5 Y. s}; x' E2 x3 X0 Z, ?1 @& a  R
else
) ^. z+ r2 {/ b+ B5 U{* S, V& G7 g3 \2 N; g# \" i
   strcpy(IMEShape,_T("【EN】"));
" t8 ^0 Z1 v# b; `- e# D8 K}
6 U. t* }6 v  g  x5 O: \6 V+ Z. Z* X" n9 i3 j
// 當中文輸入時/ O( P, f4 ^/ u& B* H+ q1 z, T2 A
case WM_IME_COMPOSITION:
" ]. x4 w9 h- u$ }3 ~8 F8 E3 n    hIMC = ImmGetContext(hWnd);% E& y; W, }- l9 @* @+ S
   // 取得中文組字3 f$ S6 C" z  z& W/ ~( S4 c/ _
   if (lParam & GCS_COMPSTR)
7 y# w. n1 b3 D4 }8 L' A    {
8 S5 J; k$ K$ e; ?5 D# q        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));& k3 a! ?' U6 d, h
       dwSize /= sizeof(TCHAR);
2 @/ Q6 s' Z" e: B0 Z( y( x4 S        szCompReadStr[dwSize] = TCHAR('\0');
* }8 k; S' Z7 A' Y' W9 J9 d    }
, x% }9 T& C' X2 K  Y4 `  O( V# f3 C4 L5 B, d
   if(lParam & GCS_COMPREADSTR)
  W- V' {" B1 @  w6 N    {( P0 @! r/ Y( k4 z! P. h
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));+ L! Y2 W% x0 \+ ?8 e
       dwSize /= sizeof(TCHAR);
- s3 U& t! ]- B; j        szCompStr[dwSize] = TCHAR('\0');5 `4 _& e- A  Y- `+ P2 P/ {1 ~6 Z
   }
) ?& C6 q1 L" X0 L% B7 C* ~' Y$ z0 }3 k$ Q
   if(lParam & GCS_RESULTSTR)
# l1 O! f# X( _* K6 Q1 Z* U# l6 k    {
5 U3 s: C+ y0 W( {        // 取得輸出字元
6 n' {: @1 K9 j2 R  b" M; ]. `        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
5 j+ ]3 p0 V- p# N. I( _        dwSize /= sizeof(TCHAR);2 e. Z) y8 T2 ]+ m
       szChStr[dwSize] = TCHAR('\0');
6 ^' F' V- T% Z: H! s        lstrcat(m_szLineStr, szChStr);
* f, w! ^& f8 `( W    }
  |! w* _2 t- v3 P    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 21:32 , Processed in 0.024511 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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