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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip2 p! ]$ w9 J! S# X' C

: B3 P) b* O1 u" ^& Y! b// 輸入法設定狀態5 W* b; ^% r+ Z$ {$ k
HKL hkl = GetKeyboardLayout(0);
% b- W( @& Q4 f. Y9 Bif(ImmIsIME(hkl))  |3 ~* Z0 h. U9 V) ^
{
$ k7 k4 J" u0 g) S/ t    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);
! h! C% S" I; o' U" [3 u  k# O    if(IMEFullShape)5 \) h" V* B5 g! H9 f
       sprintf(IMEShape, _T("【%s/全】"), IMEName);: t3 v% v7 d# t0 o6 u
   else
8 N+ ^9 h' o# p+ u; Z1 N    sprintf(IMEShape, _T("【%s/半】"), IMEName);, [+ c; ]% M4 `: e
}# x: ]1 \) d5 X2 x" }# v( F
else
8 z, ]' G% c# f) X0 u{0 w7 h. f( S# d
   strcpy(IMEShape,_T("【EN】"));
! B4 b! N. @- M) O% M}2 j  z2 R; k0 U1 F  v. C. o
3 i4 [) J3 d6 a" R! i1 {2 `4 \
// 當中文輸入時
7 A, u, [4 \( q8 R6 g  ucase WM_IME_COMPOSITION:
2 r1 m0 a* c* I1 d    hIMC = ImmGetContext(hWnd);- u4 i; U1 M) y  W! f
   // 取得中文組字
9 r, g+ q: L, z" |) {) C    if (lParam & GCS_COMPSTR)) X% [6 ^2 D; I% e
   {
7 ^, @- w/ j8 U" L3 m2 a/ G, v        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));
- g( O. S" \. L2 v, \0 f        dwSize /= sizeof(TCHAR);
; n) O  R9 n: _* g2 L. Y# Z        szCompReadStr[dwSize] = TCHAR('\0');0 x( L" q$ D8 w# X$ X/ n( O
   }3 @2 |3 o) L8 ~
  |. ^8 ~; f0 ~& G
   if(lParam & GCS_COMPREADSTR)
& ?5 i" M% R4 s* B    {
4 U; P2 @  i8 I: ?9 L: ?. b' T9 Y        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));
  R$ ?3 r- G( @% [  I  U' X        dwSize /= sizeof(TCHAR);. k' n( |9 X! s6 ~
       szCompStr[dwSize] = TCHAR('\0');4 e- _, Z% v2 Q9 o7 P# {
   }
! B+ S$ C3 b$ @( [' \+ t- ]2 q
   if(lParam & GCS_RESULTSTR)
/ c8 P( H) c6 |: j+ _- x( t- u    {
6 }& p3 y# B; b! y% F1 v" I        // 取得輸出字元0 g% b; e9 M0 e
       dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));. c3 d  X9 `7 Y, B) U9 C
       dwSize /= sizeof(TCHAR);6 I! v- ^1 @$ Z6 [5 A/ K6 g
       szChStr[dwSize] = TCHAR('\0');0 k- Y; J  J# |, _) a. e: L
       lstrcat(m_szLineStr, szChStr);& ?9 z5 K4 a* x0 d3 f7 m
   }
/ Y3 {9 w- g& z5 Z; R    break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 10:28 , Processed in 0.017674 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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