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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
5 d5 T, c  t" J) I* c2 C( \7 D$ t) {0 s4 h
// 輸入法設定狀態
3 d% }/ M* E5 D! {5 aHKL hkl = GetKeyboardLayout(0);- v& p- w  z; J
if(ImmIsIME(hkl))
9 @2 G: N# L+ A{
( s+ W; D& a, \    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
0 j, j- [. c( J# a! x    if(IMEFullShape)$ M% O! h# q) F3 Y5 c4 }1 V
       sprintf(IMEShape, _T("【%s/全】"), IMEName);9 J% ]% F, m- M  i! a- L: z& u" [
   else* o; C: ~- q: Z
   sprintf(IMEShape, _T("【%s/半】"), IMEName);
# G* I) r7 F1 H: ^}+ I$ g/ w+ `: R* D! ^
else
% P- T/ x" z5 J  N! V0 w{
6 N1 r$ I. k6 F6 n1 h# m  g    strcpy(IMEShape,_T("【EN】"));# r& Y6 C4 r' y- c3 x) W8 Q9 {
}! h+ s9 ^/ Z+ R2 H

5 o/ `8 d, d2 a# {" j3 _$ v3 s// 當中文輸入時$ \0 l9 S/ i% P" C( U
case WM_IME_COMPOSITION:
  t+ h% j( _8 z% ]" f    hIMC = ImmGetContext(hWnd);
/ p! T- Z, X  q' j. E    // 取得中文組字
0 g) a+ g2 V3 D$ d" x# i    if (lParam & GCS_COMPSTR)& T; Q( L. w$ ]& \
   {
3 {) b6 B0 ?& m9 B        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));+ e0 U, |3 s7 D0 ?5 t) n: E
       dwSize /= sizeof(TCHAR);
3 U, i4 G8 J2 k+ T/ W) [+ [        szCompReadStr[dwSize] = TCHAR('\0');- z/ S5 k: F2 `& @5 Q
   }( y  f7 t' N& X+ t8 t. x$ Q6 _8 X
4 U  @6 \8 X' t, Z
   if(lParam & GCS_COMPREADSTR)* U' K) W% [, P* X8 W5 q
   {7 R4 ~9 n. m+ R
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
9 c) M, Q6 y" t        dwSize /= sizeof(TCHAR);
( Y# k* S9 V/ ?( w        szCompStr[dwSize] = TCHAR('\0');
! {4 v/ Q. P+ C, f, p; j/ [    }  S5 @( f7 P( ?) y1 k

* T6 @3 D, n& s' y6 I$ ~    if(lParam & GCS_RESULTSTR)
3 L) b# X! e' g4 R3 Z- A  `    {$ U( @0 I- ~. X- H  i
       // 取得輸出字元
+ N" t( V/ r& O( L+ |4 T        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));  L8 f5 ?! |" Q4 _: J3 K
       dwSize /= sizeof(TCHAR);
2 N' y* q- ~& Y" f+ P3 a        szChStr[dwSize] = TCHAR('\0');
# y$ L/ g: x( z- h        lstrcat(m_szLineStr, szChStr);- Z# p0 V* p  y- Z
   }
: t7 y7 r% Z, N- z+ r    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-14 00:59 , Processed in 0.018088 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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