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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip8 u2 x4 E0 ?) z$ `) x
* n  e9 _% u6 E) S* q
// 輸入法設定狀態" c) W- j- [7 |7 x  v, J! T- `9 {. }
HKL hkl = GetKeyboardLayout(0);
  }# |; Y, J8 S5 Bif(ImmIsIME(hkl))" q" ~0 V  Y; I! f
{
( G6 X, i8 Q' S7 g) W    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
. @( _; t& c) |0 C6 X, B8 C2 C    if(IMEFullShape)
4 w' ]& W/ b! F' g( M0 T        sprintf(IMEShape, _T("【%s/全】"), IMEName);
1 Z  S8 o4 Q7 p* R3 A    else
; k7 D& h  P3 I: Q    sprintf(IMEShape, _T("【%s/半】"), IMEName);& M6 }0 G9 @! {/ b: J- {5 @
}  z) E3 L1 C7 c9 e8 o* l- r
else+ v9 J. m" |& v# P0 q$ D9 X/ b1 ~. D
{( i0 D& O% `+ n- x- R
   strcpy(IMEShape,_T("【EN】"));
( F1 _9 W6 [' G9 F1 Q9 U( P% G}* [8 _# V" s9 u
+ b- J: G9 G9 d8 T$ Z
// 當中文輸入時6 x3 |1 Y, d$ E1 j1 ~) {1 A
case WM_IME_COMPOSITION:- K1 o+ Y$ ~% z3 U
   hIMC = ImmGetContext(hWnd);! R1 L1 k5 d5 C, _8 E- s2 G, F
   // 取得中文組字% w+ B2 c$ F$ P
   if (lParam & GCS_COMPSTR)& ]/ x6 A9 j/ r/ c/ ?" Y$ R
   {
8 ~5 ~4 C2 ?+ U8 k4 H7 u        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
! z" r$ C1 l4 z0 B5 T9 R        dwSize /= sizeof(TCHAR);) ^& h! f0 k6 F
       szCompReadStr[dwSize] = TCHAR('\0');( |0 p: n# ^! c' N+ H* ]" j
   }
$ M2 q1 |" q- \' U# A4 N# q( _" P) G/ v7 \: v6 O
   if(lParam & GCS_COMPREADSTR)- @3 B; _& i. F' N
   {
  b: {! k; ~) _8 m4 f        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));; w& a' S# @& J' F
       dwSize /= sizeof(TCHAR);5 l" b% k! N! U) F
       szCompStr[dwSize] = TCHAR('\0');
( \. t7 A: Q$ Q9 y! a    }. Z1 k3 g! @  g& z# L
8 [2 x0 O! {) Z. T0 Y
   if(lParam & GCS_RESULTSTR)
4 d7 t7 O+ o1 I& W; S, ?    {1 c/ O9 x" d# G
       // 取得輸出字元1 O9 \0 M; y: s  O' Y
       dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));, s# ?8 L  F3 k' I) D
       dwSize /= sizeof(TCHAR);
% d6 z8 J+ e: ?( {9 e        szChStr[dwSize] = TCHAR('\0');. H) g/ M/ c& P; t" m+ \* X
       lstrcat(m_szLineStr, szChStr);
9 f7 M+ u9 w& `$ ^2 f    }$ N& C) R: _  c) ?5 a$ o9 _
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 08:51 , Processed in 0.034246 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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