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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
* `! ^6 d2 ~, w7 g2 V' }
5 V2 b: {! T# o// 輸入法設定狀態
/ \: {5 L: o1 r/ Q" Q7 UHKL hkl = GetKeyboardLayout(0);& _2 e$ m' ]6 h! @+ T
if(ImmIsIME(hkl))
6 p  a. Y7 Y' N{
! r" u2 Y+ A$ i, \  Q; N    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
3 N' M6 E- q' Z# S) n    if(IMEFullShape)
( |( ~: n) V3 h- G  R, Z        sprintf(IMEShape, _T("【%s/全】"), IMEName);1 j( J) v' p$ v
   else# ~6 `3 k3 o& l% P/ ^
   sprintf(IMEShape, _T("【%s/半】"), IMEName);3 z( K( S+ G/ e; z8 n! |: F4 n6 r
}
3 g$ O4 r6 d& _1 G; a8 Felse
- u8 i0 M. c7 [{! v8 M  e$ _! z
   strcpy(IMEShape,_T("【EN】"));
7 S& h- |' J* }; b8 D/ o}  T. |; T& y  {' G0 @

, D- z1 @' R7 {# [1 R2 M7 g// 當中文輸入時
0 R. c/ W& Q  i( Rcase WM_IME_COMPOSITION:
8 P+ O* T2 l, _8 ]    hIMC = ImmGetContext(hWnd);8 Z. P  d1 {$ i* @3 h
   // 取得中文組字
, ^/ @! a+ r, b    if (lParam & GCS_COMPSTR)" g& b) [# j# N
   {7 g; B  T0 Y5 u8 B3 z! V
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));* L6 Y1 ?. n+ l  w' w: d, m
       dwSize /= sizeof(TCHAR);! A0 O' ^: H- W5 X) ^
       szCompReadStr[dwSize] = TCHAR('\0');
1 k  o6 v1 O. L; E; j& H    }
; F5 G+ l9 I8 F: U$ ]- Y# `* s8 b
   if(lParam & GCS_COMPREADSTR)
9 N( D" o* s- {! X1 q    {0 {; p% `; j4 v6 A$ i
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
0 P" F; G+ ?4 Y" d, @3 K9 ]8 |1 `        dwSize /= sizeof(TCHAR);8 P  E! n6 Q  b3 W/ x- `0 Q
       szCompStr[dwSize] = TCHAR('\0');8 l- g" M8 T, B/ S. U7 l+ f. K+ U
   }
: Q  t, W9 m1 Y( n5 A" x% e# r; v) [5 R  }, v3 d6 \# ?( V+ j
   if(lParam & GCS_RESULTSTR)3 w" G' n+ ^7 k
   {+ j1 B# a# U" o% K
       // 取得輸出字元
. F8 m" @- L$ q% c: s        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
4 V. k' a9 B+ _/ W* P# Z        dwSize /= sizeof(TCHAR);# a* G* a! ]' |, \5 S
       szChStr[dwSize] = TCHAR('\0');
$ G: K: y$ w5 v; U& I        lstrcat(m_szLineStr, szChStr);" O* ]4 d1 h% V$ |. ^$ U
   }
- Q1 E7 C" s( c3 j6 Q1 B- J1 Q. ?    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 02:38 , Processed in 0.017392 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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