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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
7 D* q" \4 u9 v1 R4 y& J/ g* X( K+ z. a
// 輸入法設定狀態+ x2 t$ y% d" _! u
HKL hkl = GetKeyboardLayout(0);
/ H) \0 y# @+ rif(ImmIsIME(hkl))' A) j3 u7 a6 N9 I8 y
{
; h+ w$ G; ~5 @  Q. ~3 D2 b    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
4 o. P$ i$ \& o$ X- |. [4 P( U9 L    if(IMEFullShape)6 k$ X+ V# c6 L' d; U; L1 j- q
       sprintf(IMEShape, _T("【%s/全】"), IMEName);
; G+ D0 v$ d3 N' j    else; g; R; o* e8 {. |0 [
   sprintf(IMEShape, _T("【%s/半】"), IMEName);
+ [3 M; d1 }) J) C% q}
* B% m4 n8 c  a2 v: n$ \" M" Lelse
- r: F/ c" o; n$ \7 T  I{0 P7 k* r& X% |! ~9 m- W
   strcpy(IMEShape,_T("【EN】"));; {& x  S$ J1 v& r% f
}2 B1 R& {) R+ s4 U3 l* O
0 Y1 g2 Z1 ]( z) V
// 當中文輸入時
# o5 h* o3 w5 ?- v4 J- }case WM_IME_COMPOSITION:: H. k- D. q7 a: E& ^8 [4 N. D
   hIMC = ImmGetContext(hWnd);
- B1 R1 x% E% m0 k    // 取得中文組字9 x% A; u4 o# l0 F; A! v! Y6 U; C
   if (lParam & GCS_COMPSTR)( R/ e8 n, f" l) p$ f, i3 {% z
   {8 U: h1 U0 d' B) f8 f7 ?' }+ K
       dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
4 C& A  R. ^% l$ z        dwSize /= sizeof(TCHAR);: w* _: Q/ A# r2 |2 y6 u6 Q
       szCompReadStr[dwSize] = TCHAR('\0');
$ d: [. U  w5 x1 R8 d) Z! Q    }
2 e- k3 F  Q! |: v/ ~, F
0 _' Y! u5 O, v6 A    if(lParam & GCS_COMPREADSTR)4 ]9 v8 r& y$ A, a: ^0 }
   {
% c5 @. v6 Y7 H  J        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
6 e: L4 c9 |3 A+ z. @: f# _        dwSize /= sizeof(TCHAR);
% u# ?3 Q6 ], g; s6 |        szCompStr[dwSize] = TCHAR('\0');2 t' T: T0 i6 B7 W2 b. r6 X
   }( `$ Q/ s  t, L( D5 M* F+ i

; R9 Z' a! o( M; u    if(lParam & GCS_RESULTSTR)
: G' x' g' l% \+ D    {
# `' D) l% `4 P        // 取得輸出字元: d  W6 Q  w, ^6 m
       dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));- ]/ T4 o+ t9 h7 t8 Q) Y4 w
       dwSize /= sizeof(TCHAR);
3 x) o1 D, R  G1 S        szChStr[dwSize] = TCHAR('\0');! t4 U. ~, ~' w! ^
       lstrcat(m_szLineStr, szChStr);
3 T0 m# ?  o3 W6 o* K$ D" n5 b    }
5 j, Z; K- B: i" i; u3 O    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 04:14 , Processed in 0.033720 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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