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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip
) A% S  i: d, m) U# O( S" O9 Y; A
// 輸入法設定狀態8 ~$ V5 }" z/ N3 K9 O
HKL hkl = GetKeyboardLayout(0);
% d1 r' W3 k" D! ^. h! m: yif(ImmIsIME(hkl))
9 x( J0 v- n" _9 w, W& L3 }2 e{
$ Y9 k: ?  I  ~9 n& u! a    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
$ d1 j0 g' b; a; r- ^# _# h7 s    if(IMEFullShape)
& E/ U( C6 T5 T        sprintf(IMEShape, _T("【%s/全】"), IMEName);
. c  @1 x! |- t. T( |    else5 G3 H4 p6 S- i. c
   sprintf(IMEShape, _T("【%s/半】"), IMEName);
( X) Q. T: z# s- F) {1 I, S}, D. Z4 i, e- b# G1 p& |
else* A- F1 a- F" i1 \+ o0 s/ H+ r
{
0 `0 ?" [" y5 ^    strcpy(IMEShape,_T("【EN】"));4 }. Z7 j0 O/ F" x
}: [0 [# B/ G* Y. J$ r( ?8 d

0 V. _0 \, _* U# y// 當中文輸入時
+ V, K8 [+ M2 u1 Zcase WM_IME_COMPOSITION:, X5 i% c1 W8 C6 G9 D8 G# N# g
   hIMC = ImmGetContext(hWnd);
3 y1 y* Y" ~% w' i# }0 o    // 取得中文組字' p5 \) P  C; W7 J; M9 y: G
   if (lParam & GCS_COMPSTR)
! a1 d) ~2 ?2 X6 k1 \; R' v" l    {
0 Y7 @# |. v+ @( q: |% H! w8 R        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));9 x- w9 n) o! s% {+ C% J
       dwSize /= sizeof(TCHAR);4 J; L, F  m: [" o
       szCompReadStr[dwSize] = TCHAR('\0');: \4 H& l( ^* [. U6 j
   }
$ f) U9 d$ f* V) `+ X: @. P, x, D# ?) W& A9 Y, n
   if(lParam & GCS_COMPREADSTR)2 d3 U( Y$ N/ K% [3 O7 R
   {( q% x. y, {' _" S- q5 n/ X9 x
       dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));: g/ x7 G  M2 c9 F+ R4 m- x+ b4 m
       dwSize /= sizeof(TCHAR);
5 a3 D/ `( T5 m1 X4 H' w4 f. l. x$ v$ s        szCompStr[dwSize] = TCHAR('\0');* \& c) H  m* N+ J1 n/ W! i8 R/ ~, S
   }- _0 z+ ~& R  x

/ B& _5 j# u- w" e    if(lParam & GCS_RESULTSTR)  M' U1 D% _8 f6 J0 @/ v4 T
   {
/ _4 G/ _4 C# u  C1 D: Z        // 取得輸出字元
+ I* N4 e5 h' W        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));- R: \8 f1 h/ H  F
       dwSize /= sizeof(TCHAR);
3 u9 K) M1 `3 K7 E9 j" F        szChStr[dwSize] = TCHAR('\0');' A# d" K+ Y, g$ [  V8 ~
       lstrcat(m_szLineStr, szChStr);
$ l; j8 o# L, r7 a    }
4 ]5 J: ?% W$ _( N  \4 D# ]. L    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 01:39 , Processed in 0.033582 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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