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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
' I* `2 f! Z0 N+ b8 l
2 }  _2 K2 Q" W7 z& I// 輸入法設定狀態
" n& K( E1 x" c: bHKL hkl = GetKeyboardLayout(0);" T0 u7 x0 D; f+ V
if(ImmIsIME(hkl))) ^  g# h0 m! S) I5 G1 x. A! }
{! y" q. t; u. t9 x6 c3 e4 E: h
   ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);6 }8 I5 M( s$ l6 e/ \$ r
   if(IMEFullShape)2 `, k) V+ h3 @+ E& v
       sprintf(IMEShape, _T("【%s/全】"), IMEName);3 f1 s- H( C4 f; b% A7 f
   else
+ d3 ?4 v& x% L    sprintf(IMEShape, _T("【%s/半】"), IMEName);
" ~+ Q0 X8 T9 A, b  S# o0 ]- R}* V) R  d9 p0 P0 I& V" c/ a
else8 X/ J& }2 h" z3 p: N6 x
{
7 S/ a& r1 A) F4 e- W; r    strcpy(IMEShape,_T("【EN】"));
' g! A& B6 j/ ?! m$ J6 o}
3 T5 y4 s5 v1 b+ w9 Q6 L/ X0 I7 B: @! M- D  Y
// 當中文輸入時
: @0 Q) U1 [7 l% }- d) R$ tcase WM_IME_COMPOSITION:
2 k# t% K; j9 W) `- N! w9 g    hIMC = ImmGetContext(hWnd);+ ]' C' x! T5 X: B
   // 取得中文組字
# [4 R& p4 D/ P' J  e    if (lParam & GCS_COMPSTR)% [/ G+ L+ u) t9 h# f0 r2 b
   {
& |1 E. C, y: v/ U& t# j  O        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));; h& l, R$ @) Q# X9 U. _
       dwSize /= sizeof(TCHAR);% h! h3 R% N, p1 I( E% e
       szCompReadStr[dwSize] = TCHAR('\0');# E4 D3 W' _! ]1 r
   }3 c9 Z  z/ {3 H+ v- ~3 M

7 P& \* `4 X& V0 H    if(lParam & GCS_COMPREADSTR)- M) n0 j+ g- K1 x7 C
   {
* b" Q, u4 e/ I# R* L. ~4 O7 x5 I        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));  S0 i' s, i) i; U; C3 ~3 Q
       dwSize /= sizeof(TCHAR);: k6 q- C# a5 M0 ~8 L* ?+ n4 l
       szCompStr[dwSize] = TCHAR('\0');
+ Z6 Y3 s/ x' z# F- M/ t3 j  B    }
8 p, k0 F  A! [( _: P& ^# z$ T  R1 ?3 v& \; s! d" v
   if(lParam & GCS_RESULTSTR)
* W7 L) i6 q6 ^* t- c5 c6 t    {
3 m0 `8 U. \- M4 k' w4 ^        // 取得輸出字元
' Z0 e8 r7 b+ {- E# _% V; h$ O. N) Q        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));
1 q* ]9 n1 N+ M' A- N        dwSize /= sizeof(TCHAR);9 t  h  j4 c2 _9 r9 t# a) T
       szChStr[dwSize] = TCHAR('\0');
8 g- `9 A9 U* q. [& j/ c- o        lstrcat(m_szLineStr, szChStr);# m0 h. @  F/ g0 }, h) k$ z9 v
   }
) [6 ]* P3 P$ c    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:50 , Processed in 0.018481 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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