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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip/ m. z4 d4 V- `  a6 j
. \" b3 u( q/ K# _, D, _3 i
// 輸入法設定狀態
" i1 f7 R5 J$ EHKL hkl = GetKeyboardLayout(0);
1 c% Z0 h$ u2 Hif(ImmIsIME(hkl))
% f! q6 {& r" D{9 X' C3 G; _6 A1 R+ u6 \
   ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
* S+ r2 Y4 G' r  R  B    if(IMEFullShape)
- p* I7 T6 S1 S) h) U( A        sprintf(IMEShape, _T("【%s/全】"), IMEName);
) w! G8 z+ D7 B! H7 v    else
9 L; {1 W. F, r+ V# `1 |" `    sprintf(IMEShape, _T("【%s/半】"), IMEName);
1 y' w1 p+ Q  Q! P$ O4 E}
4 X4 L2 e; w5 G( i$ Q* Jelse
$ V6 M1 R' R0 t4 w{
% d/ j! t4 J! d    strcpy(IMEShape,_T("【EN】"));
7 Q( Q* o" R; k}
" X7 @3 g4 l) {2 H( `, r8 v' I* D# E6 [( d; Y$ V7 `4 g6 F8 h3 b
// 當中文輸入時/ N2 ~; ?% W% a1 c! v+ J& I
case WM_IME_COMPOSITION:/ V, k  W8 F' D) t/ K2 @; h
   hIMC = ImmGetContext(hWnd);
+ V. q- Q: ?: x* ?$ I    // 取得中文組字! T* m' V' n7 @& _
   if (lParam & GCS_COMPSTR)( `1 k& e3 X$ ]2 B! k
   {
2 }! c5 W# V3 T9 q* e        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));5 d& v) L* l  \$ l, n" K
       dwSize /= sizeof(TCHAR);+ O1 V. N8 T/ A3 Z2 g+ y, l5 ]
       szCompReadStr[dwSize] = TCHAR('\0');
8 b4 w" @6 i" f( o. S1 D6 f    }
" U; v2 R2 I( r& }- @  X4 a, V
- R6 `  T4 A% C7 i' o+ ~+ [6 ?: a    if(lParam & GCS_COMPREADSTR)' D' Y! x4 r( k
   {
) `# a* G9 f* ?( V        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));7 C9 n2 W# T- y# L. H
       dwSize /= sizeof(TCHAR);' n" `/ p- v) C4 p5 P, W
       szCompStr[dwSize] = TCHAR('\0');
" H) M$ O  v( p  g$ P9 W    }: i7 ^4 n8 U  {& o' M
9 a6 J; {& a1 V" y9 {+ b7 F' o8 e( P
   if(lParam & GCS_RESULTSTR)
6 l$ I- L: M, `    {
. u" T4 G9 Y4 F; G. I        // 取得輸出字元7 V/ c  N/ M, G. H) r! R/ k
       dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));' |7 z  p2 Z1 j! V; p
       dwSize /= sizeof(TCHAR);
: ?+ D" t; g6 g8 J' }        szChStr[dwSize] = TCHAR('\0');
: w/ N- @6 u: X: r        lstrcat(m_szLineStr, szChStr);
$ x- s/ q3 C9 X1 z4 v    }
+ m. e5 f0 u3 A( Y9 h6 ]    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-4 16:52 , Processed in 0.019236 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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