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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
! H2 T" e- v8 m! Y  l0 C9 Z6 i0 l6 f& K+ T
// 輸入法設定狀態. Z) C  h! Z$ ^
HKL hkl = GetKeyboardLayout(0);
8 V) G. n' Q: t' b% ^0 zif(ImmIsIME(hkl))8 r7 c3 z  [' J" s8 b1 [& C2 ~0 K
{
- q8 W. y% z5 {    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
1 W- L6 n- X* Q2 b- b+ P. N    if(IMEFullShape)
+ M! W0 E% |" v9 g! m+ C5 A$ o        sprintf(IMEShape, _T("【%s/全】"), IMEName);
% n& e$ `1 X$ r3 }$ p    else
8 P6 _% C8 P; l2 k$ I    sprintf(IMEShape, _T("【%s/半】"), IMEName);$ L) T% p  I. h) X1 L" u  V4 ^! \
}
" e( b( G& H2 o9 i1 l8 ielse' @8 d6 G% G$ l8 G, `
{
9 [, N8 `+ C- C) w! p0 k% o    strcpy(IMEShape,_T("【EN】"));2 _$ M0 T1 G8 j7 x
}
. E# f: P4 D  u" ^' D
: R5 ]. \' c; ]// 當中文輸入時
# i: S0 M1 Z, l. Y* U2 Wcase WM_IME_COMPOSITION:
/ R8 ?1 ~7 u4 G    hIMC = ImmGetContext(hWnd);
2 S: }9 s# t+ U5 S% t' ~+ D' F    // 取得中文組字1 n$ l$ F3 b& |3 g7 R" f( s/ J2 |
   if (lParam & GCS_COMPSTR)
" i* r/ \! ?# x6 n+ z/ w( b    {. c8 d  [( h% ^9 c9 b$ N' n: i" c' P
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));& _+ K0 G0 K! X, i" ]
       dwSize /= sizeof(TCHAR);
; R- x8 q1 i2 V0 H' u        szCompReadStr[dwSize] = TCHAR('\0');' v4 j0 Q, i9 Q& ?
   }
# m( k+ b. b0 A8 ]9 b" J5 s4 |. s, k! U! G1 }6 B9 o* G
   if(lParam & GCS_COMPREADSTR)
" G+ M/ G& b8 I9 y4 R$ O6 b    {( g. K" ~3 X% H: V: D
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
! D! X/ ?2 {1 D( b. d+ t        dwSize /= sizeof(TCHAR);
2 x" m( Z% c4 v0 F, ^# G/ g        szCompStr[dwSize] = TCHAR('\0');7 a( j' O. {) @- O
   }
' l. b; ^! O0 X$ G. x9 h% t* e$ K$ A3 Q* L
   if(lParam & GCS_RESULTSTR)4 W" V; K* ?; `5 }7 K& {. v
   {# U3 K5 k) Y4 g
       // 取得輸出字元
; }* W- w/ a" y# h; I2 j        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
4 x" Z1 T" A9 z6 U$ ]/ y: ^, T        dwSize /= sizeof(TCHAR);4 W( K# Q3 z, F3 D* N
       szChStr[dwSize] = TCHAR('\0');
9 p* x' @' n- T8 K9 _3 M        lstrcat(m_szLineStr, szChStr);
, K% v1 w5 i7 G5 }0 j    }; a: [, k8 Y6 t8 s4 l
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-1 23:11 , Processed in 0.015451 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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