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

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

[复制链接]
发表于 2005-10-20 23:14:56 | 显示全部楼层 |阅读模式
    一般之前人說用WM_IME_CHAR及WM_CHAR但此種作法不是一個良好的方法,而且在雙位元版時會有一些問題出現,所以建議採用下列方法,上述夾檔是MSDN中的範例,大多可以運用,但在嘸蝦米輸入法及一些不是微軟輸入法上運用上可能要有所修改,下面是參考別人的資料及上例範例中的小整理。夾檔:  IMEAPPS.zip8 j8 z- a& {$ V+ L$ h/ M/ M
5 B/ x' F( B5 _8 f* ^
// 輸入法設定狀態0 Z/ `4 P6 \6 r1 {
HKL hkl = GetKeyboardLayout(0);
; T% @5 c+ d! i& R8 {0 Qif(ImmIsIME(hkl))8 n0 J+ G0 `- |+ U* F5 q, ]; A
{
5 `' a4 G2 o# S6 a$ i5 M8 N7 y    ImmEscape(hkl, hIMC, IME_ESC_IME_NAME, IMEName);" s* \5 f) W* T- q2 R  P$ S- I
   if(IMEFullShape)
3 o- K. F+ ]( y8 v        sprintf(IMEShape, _T("【%s/全】"), IMEName);
! {, x8 O3 d6 C; j( M& ^$ d) @' c    else5 v' ~# m$ K* w  F) C! O: q8 z! }
   sprintf(IMEShape, _T("【%s/半】"), IMEName);
3 v5 L# n/ t5 y  H& p- c: R0 V$ T}
2 V9 H6 Y9 x, h3 r1 z4 {" F# Eelse& ^5 T7 ~$ z) I
{% m8 Q( U* r/ w" ?5 Q. \9 N
   strcpy(IMEShape,_T("【EN】"));7 M) F! `5 r3 S" u2 @
}
% E% r  B& D2 R3 o( ^- V2 T: m
% A7 x( t- o7 e/ R( P5 n& L// 當中文輸入時
6 C1 j* g1 X& W( Lcase WM_IME_COMPOSITION:
) y% v7 z5 N% s0 Z    hIMC = ImmGetContext(hWnd);% S& b* ^* I: W9 [
   // 取得中文組字
2 J/ \" U- l" h    if (lParam & GCS_COMPSTR)
8 L# `1 H: f5 Z5 U" p6 m1 }3 U    {
8 W0 s/ e+ k" J        dwSize = ImmGetCompositionString(hIMC,GCS_COMPSTR,szCompReadStr,sizeof(szCompReadStr));1 C+ T- e: C* C/ T+ }: M
       dwSize /= sizeof(TCHAR);2 P# j) K* |& m) q8 H; K" w, }
       szCompReadStr[dwSize] = TCHAR('\0');! H. B( D' L3 W$ i# c. F5 m5 f4 \
   }
7 O% B' f# O+ G+ V' U7 X
/ }6 X% l& ]  R$ G9 @  p: k    if(lParam & GCS_COMPREADSTR)
  R' @, V8 Y. n: w  q& d1 T3 N    {
0 F8 L& p1 A( ^. m6 U0 o+ [% l        dwSize = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, (void*)szCompStr, sizeof(szCompStr));: S% i, i6 f9 h$ E# w3 ?# i
       dwSize /= sizeof(TCHAR);( Q  a6 @  @( P, _' y! J
       szCompStr[dwSize] = TCHAR('\0');6 z3 W  x" Q* {$ j
   }: x/ b$ ~8 f- A

1 W1 D* t* T. @' g1 U    if(lParam & GCS_RESULTSTR)
* A' A+ N$ ~! J8 U, e( W0 {    {3 u; e- u- g5 U% H& z6 i
       // 取得輸出字元
. S0 {" z+ `8 |: z( P        dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, (void*)szChStr, sizeof(szChStr));5 s3 V: U. D2 D4 K+ \: ?) \5 H
       dwSize /= sizeof(TCHAR);, O# a% i" Z7 Z5 w+ J
       szChStr[dwSize] = TCHAR('\0');
% s! y# |& J: M$ a) H7 j( B        lstrcat(m_szLineStr, szChStr);
; D& p; n, ~. |: y    }( l5 e* \5 p4 G8 W9 y
   break;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 12:31 , Processed in 0.016033 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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