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

[收藏]DX下使用系统输入法

[复制链接]
发表于 2005-5-16 14:49:39 | 显示全部楼层 |阅读模式
  //******************************************************************//) Y* Q1 U; ]& I
//# \- D$ }9 R6 P/ o2 E" t0 B
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
6 e8 t$ V3 O( i// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
; c2 N! @) Y( o& c. v9 l// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net# V7 i! [* O, N+ u
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT+ n  W& @; R; g1 J+ L
// 为显示信息用,可以用其他方法替换如 TxtOut() 等2 V: {3 Q8 v1 d
//
, ^% k0 m6 k) O; k7 @! s$ T7 ], i//******************************************************************//% F& Q: R5 Y2 j; H# S2 e# g+ S0 y

3 c- G' o' a) N. b) ?. D2 ]//////////////////////////////////////////////////////////////////////
& K" v3 R" S# b: a8 f- w//; H. P( i$ w6 Q* W# V0 t
// IM.h: CIM class (使用系统)输入法类* q7 G8 s1 O$ {. ~8 D; z
// 2001/4/30 Write by Jerry Wang
& C; b' m; Z) r// 感谢大大鱼的帮助
! v  y! e$ j: K2 ]4 b5 i' e& e, S// Need Lib: imm32.lib
  Y; K* |3 C5 T) I//; W( R8 b$ \0 u
//////////////////////////////////////////////////////////////////////
0 w! J8 f# e  z  s2 r4 a) E8 W' |4 v, m- J) }
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)1 _, X* f  X1 e7 J/ t0 f5 h
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_3 k8 v& e. i3 A6 m; u0 \" M1 L

4 u2 W  p1 W* W, |3 i+ B0 t#if _MSC_VER > 1000
0 K( [% Z3 e' F$ y#pragma once+ i$ x" K9 O6 }$ k' ]! a& k, b, C
#endif // _MSC_VER > 10004 A6 i3 F1 P6 m2 @4 w

5 R% Z7 [/ `6 M. N: @. ^* |2 ?3 y#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数
7 W' q- v' ^6 T9 O
7 l! ?: l: d% B# C. E#include "FindMe.h"" b. w0 h% A6 g/ @2 v

9 m0 U) S2 C! K6 L3 dclass CIM
+ r$ f! L3 P1 ^: O  N. H# u! R{& ^% L% ]% q) a8 d! S/ X
private:% p8 A2 T- T: r1 k
   CTTFFont ttffont;                    //显示信息4 N( N. n/ U$ Y4 c& A4 p" C
   LPCANDIDATELIST m_lpCandList;        //输入法候选文字列表3 x1 w+ g7 {: P6 n
   LPSTR m_lpszImeInput;                //指向IME输入的文字字符串指针+ D0 J, ~+ V9 @- o
   LPSTR m_lpszCurInputLanguageDesc;    //指向当前输入语言描述的指针
$ i' {! w, P' y* b    char m_cCandidateList[255];          //候选文字列表缓冲区$ @" S' g# C1 V9 Y7 @, \" k1 S
   char m_cInput[64];                   //输入的字母
, I5 |' h* n3 U" V9 r: w7 U* d& m
( n) Y& `$ f' L0 z4 R1 E    BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串5 H/ ~! Z' I6 Z" R

8 a7 ^3 w0 j2 h- D: I# gpublic:
* ^/ P8 H$ f, z" Y% Q- g  e
! _* c3 _, T: z, i2 t! J    CIM();
4 `1 e( t% }) i' V( K* {0 H    virtual ~CIM();1 d- v* u% w" p+ T" _- K; m

. q0 l- P4 t6 U; z8 t    LPSTR GetResultString( void );                     //取得输入的字符串
  h+ T, T. z0 _# J$ p' c/ \
& _4 h* G! S0 |* Q5 B    void UpdateShow( );                                //显示输入法信息
9 r/ Q1 D4 g! K' y8 i. l& D+ H& V$ Z7 k
   LPSTR GetCurInputLanguageDesc( );                  //取得应用程序当前使用语言的描述7 }4 d& O) }* n, o7 z
   void ClearCandidateList( void );                   //清除输入法文字候选列表2 A  Q% N  v3 `9 i
   BOOL GetCandidateList( HWND hWnd );                //取得输入法文字候选列表
& Z( B3 d, A& f6 B9 [5 X; z    BOOL ImeIsOpen( void );                            //输入法是否打开- d8 c+ p/ O" k$ v4 X9 `
   void OnChar( TCHAR ch );                           //处理WM_IME_CHAR消息
4 b1 ]% {; f" H0 v! [    void OnImeNotify( HWND hWnd,WPARAM wParam );       //处理WM_IME_NOTIFY消息
' v$ h# ?6 m1 ^5 }, S    void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
: u; c; F8 q( D9 j* x  T! }};, v: k( o2 n. z1 Q# Q

4 J% Y: j2 m( j& q  M4 ]/ ^* e#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_): U* F: Q: c1 E( f
4 R" B' m4 H5 g9 i8 v
6 u$ B- g- l% m& Z

, s; |* m& V" `/ H. W+ p//*********************************************************************************************//
' p, |7 L) l8 O$ d& d! M; v" I, ~) [% I; e& y) s3 g; J
//////////////////////////////////////////////////////////////////////. p2 f+ w+ u" u: O
//
, k0 k0 _5 o6 Y  R// IM.cpp: CIM class (使用系统)输入法类
! R7 C0 ]% ]1 K& u* ^( `8 O// 2001/4/30 Write by Jerry Wang& ^3 H# I! X' v4 G. R# q7 }+ D; V
// 感谢大大鱼的帮助- R6 I% H9 b2 X5 I/ m! K
// Need Lib: imm32.lib5 \9 M* l+ G! Y9 }4 r6 c) g" h5 d
//
. t: t# S4 ]# W1 e0 s- F  v//////////////////////////////////////////////////////////////////////
; ^! ^( ?2 E+ T( ?
* J1 m8 a5 B1 b, N' ]) T5 ^#include "imm.h". v: M7 a3 z4 B
$ M* L! Z) e2 K& f# M% T3 I" ^
//////////////////////////////////////////////////////////////////////( V" Y( ~0 @, l) U* X
// Construction/Destruction; |$ i9 v/ p; D! F5 u' y# j2 J' t/ Y
//////////////////////////////////////////////////////////////////////
! N  y' l' O8 O, ]3 a/ X9 \! F8 h
6 E$ E2 V  B" u4 f( G" MCIM::CIM()
- k* a- R+ ?2 Q; l3 d{
5 t) g+ P# ^, F6 ^    m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
8 E5 j/ H3 b3 z3 i( G    ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
4 G* e+ O. D* G$ W! D' T    *m_lpszImeInput = '\0';; V* }5 Y, v8 E1 D
   *m_cInput = '\0';9 C. n/ L$ X4 o: c

7 d3 j( G, i- @0 {% Y& M* r    ttffont.Create( "黑体",15,RGB(255,255,255) );- t8 Y, v: ]* b+ C
   GetCurInputLanguageDesc();3 Y6 @+ J* @; S8 H7 i5 v) O
}
/ G4 ]' w3 ^8 @
8 @5 a, b4 c2 y1 j& }! @/ j5 SCIM::~CIM()
7 w2 Z1 a( W- {{
5 y# l$ I/ D: W6 w! ?    ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
! t6 ^7 u0 ?3 Y$ F0 S) [! l7 I' F; [! {# B' H7 h3 D9 {8 t
   CHKB( delete m_lpszImeInput ); $ s& X: G) X; m" v1 T! e6 Z
   if( m_lpszCurInputLanguageDesc != NULL )
5 \1 a6 z' R/ k' M% v        CHKB( delete m_lpszCurInputLanguageDesc );
! m& Q  ]0 B8 R, {; d5 x}7 `" F  i0 v  ^- f9 W3 R

# e% B/ p3 {4 Lvoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
( m, ~% _9 E9 m, B5 s; {0 u{( Q- j) }3 _1 K2 b  Q# W# }: e$ c
   if (lParam & GCS_RESULTSTR)) B- |0 o& C9 p; v1 e/ H0 ?4 ~7 S
   {
6 t- b0 A4 G2 ~        HIMC hIMC; //输入设备上下文/ ^9 z* z) o0 {$ h; Q, B
       DWORD dwLen;
  v3 _! q9 @, r        LPSTR lpResultStr;
. k5 b, b' s; C% `
0 w$ o0 n9 u: T( R7 n# b+ d        hIMC = ImmGetContext(hWnd); //取得输入上下文
  v3 P" w2 N! n0 i+ ?9 q7 R5 `; g5 P# U6 y
       if (!hIMC)
8 j/ ~- r3 B  e* u            return;
5 ~: K( y" ?8 ]  j% i; a- a: z+ f" E( N; e
       dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
4 L/ p1 n, g* P5 o* V2 P        dwLen+=1;, S# V( G9 _$ |1 ?1 e  ^3 l

2 Q  o& F' j" K7 d0 g        if(dwLen)* K- x! }2 j8 i& w, K
       {
; g$ V0 t' b" w3 L/ U" _            lpResultStr = new char[ dwLen ];3 I2 a- f6 T2 ?( n

% c% {7 x" K" E            //// 缓冲区已经满了
/ ^+ Y6 v: K  i. N( B            if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )% q6 f- b; H$ z7 F: q) G# O
           {
/ |$ I. I/ e% n8 B: _7 J3 d# q0 n                MessageBeep( 0 );+ n  ^5 k, F( d3 C
               return;3 \  O3 \% L7 M* t& J9 e
           }7 w% d; W: M2 h/ _% i( n( N& w
           ZeroMemory( lpResultStr ,dwLen ); * h/ U+ G$ Z# n& P5 f/ O6 R% e6 h
           if (lpResultStr)5 @$ }5 L9 ~4 _9 V
           {+ H3 U) n8 m9 n/ f; f) H4 _* ~
               ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
# b  X1 H0 W0 L, ]! w6 {5 g                strcat( m_lpszImeInput,lpResultStr );: S7 q: f% |/ j* a
           }* ]- q" u' q4 \/ G3 i0 T% L
           delete lpResultStr;
5 h* J2 o6 @1 D' E' O        }
0 b) r# y: i; a3 T. l, E3 b
( \" B; h1 S0 C        ImmReleaseContext(hWnd,hIMC); //释放输入上下文* _6 t- H; b, L' U3 e8 t
   }5 Y0 s; }1 }  v0 U& K1 ]/ P& z, @

1 s7 o, ?3 G" a0 K; J}
4 V  G/ h$ k* ~
. H/ n3 n/ e2 p4 d. B4 k7 E8 mvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
: `2 ?4 h) Q3 i9 O+ M8 J{
1 _* X, o4 N( n6 K; q9 Y    DWORD dwCommand = (DWORD) wParam;
, W! t" K3 A+ ?3 Y# L6 u' N, V/ M    switch( dwCommand )
$ ^( q3 O) G* {  r" U7 G/ b$ Z    {
. V1 T8 K' F# L- \3 @& @1 u2 o    case IMN_CHANGECANDIDATE:
* ?- S2 q/ u* z) C        GetCandidateList( hWnd );+ C) E) y  c/ a* Z; S
       break;. C7 [# |" o( F! `# A
5 F' U3 v  p. q( W
   case IMN_CLOSECANDIDATE:4 L- Y$ _3 M1 g
       ClearCandidateList();5 B5 t0 y2 p2 L/ x) z7 n) y
       break;
* b& i1 c' q$ J  n+ q$ f& @9 E( D- x9 ?
   case IMN_OPENCANDIDATE:
0 E8 u1 }  P  t2 o* _        GetCandidateList( hWnd );
8 U  }+ k  c  G+ R/ K        break;0 [" |3 t/ H4 _( k& O; v( T
   }7 }) Y/ ?$ u, [: p6 S
}
2 q4 t! M# Z: K" X
$ ?2 u  D! p$ O6 ?void CIM::OnChar( TCHAR ch )1 [. W+ b9 G! Q& t* Y. ~
{
% i0 w, P) b- w8 Y8 q7 H    int len = strlen( m_lpszImeInput );; I  G2 F5 w( r& @6 E, V$ |
* X. |, U7 ^- I" h3 ~$ \  b
   if( ImeIsOpen() ) //输入法打开状态+ h; o: U2 U9 k% T* V
   {* @, Z% N' y! U! J) S
3 ]+ [# m+ N) [/ S1 U& @8 ^
   }, @) x2 U; v  S$ s7 x6 c8 m/ p
   else //输入法关闭状态9 ]( z4 [+ w( L9 x; l
   {
0 O: q. `& K! K/ ]        if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母
+ a1 N+ N% I  q) Q2 R" q" L7 I        {3 s, K) I/ J% n2 ?8 F
           *( m_lpszImeInput + len ) = ch;
. p# V0 O$ U- n" w  P  o% t            *( m_lpszImeInput + len + 1) = '\0';9 g" L& |0 \, P2 n& s
       }
  F6 j% Y! o6 ~+ ~" F' {. q! M! d' \: k& l    }, U  O& y6 k& K. j' \/ _

- {+ m9 o  _5 @0 X4 o" x; U    if( ch == 8 ) //BackSpace字符5 T- Q/ \/ J* s' |; E
   {& s' d& U+ P- W2 J! h
       if( len == 0 ) //字符串长度为零
! ]) h1 G8 q! A! f            return;$ O: L7 x% R7 n; G
6 P! C2 ]! y3 o# e& m
       if( len == 1 ) //只有一个字符2 _/ M$ d9 \5 x2 N- d( X3 B8 x( s
       {
- X% s, r0 _. h: V1 Q# J            *m_lpszImeInput = '\0';- u2 x3 L4 W5 o0 q) l2 r; W8 R$ J- d
           return;8 I7 e5 j+ m# |
       }
6 [5 s3 ^& T; S7 \/ \, j/ w9 W+ t" Y6 F- v7 Z* @4 v
       BYTE cc1,cc2;3 R& p$ U3 s7 r$ @, g# x7 X1 g6 t7 ~
       cc1 = *(m_lpszImeInput + len -1); //分离字节0 {: P* g" j; [. }' }7 G
       cc2 = *(m_lpszImeInput + len -2);( k# L( E8 t* P9 S, ^/ [9 @
" E3 {" v( {8 g# m/ d0 _2 X
       if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0) \& ~  d* |7 T. v: V: h5 w0 E
           *( m_lpszImeInput + len -2 ) = '\0';
) J5 U$ A( X2 y# B. U; E* `        else //是英文字符(单字节)
/ u1 E* T( A  E5 P. K* ?$ K            *( m_lpszImeInput + len -1 ) = '\0';
0 X3 u3 {5 O5 g% H' N, {% P0 ]- ]    }' W; V7 E, o5 S( a" d$ x1 M
}
! q0 U2 }- O) `4 N
2 @/ f. P2 K1 `9 o& zBOOL CIM::GetCandidateList(HWND hWnd)' ]* k9 v# i% K& K- A
{8 q. \* C0 }+ j0 C* ^( z
   DWORD dwSize; ; `7 q% d* L$ |
   HIMC hIMC;
- j( b  t& P- H( V- c" v3 l9 r8 ^' E: A
   ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
$ s; Y' H" u  ?% Y- {
0 K/ _  T. Q" p2 S    if( m_lpCandList )
0 H4 p# [, x* M% |4 h/ y    {
& r) y8 ~/ Q  m# b% r/ M( _: i        delete m_lpCandList;
6 w6 f  K# K6 H0 R* X7 j        m_lpCandList = NULL;
# C, }  v; h- B3 d- ?% T    }5 V4 @. Y# w% @& h
+ e- }9 j* m6 r& p8 X/ ^0 K
   if( GetKeyboardLayout(0)==0 ). {  n4 k2 v, o) f& p" h. {
   {1 L, r7 S8 |! O
       return FALSE;- ]0 Z. I2 s/ A6 e0 h$ o
   }" q' D$ I# C: |5 ]3 C

$ |# y- \- T" i; k' z. e: N* m    hIMC = ImmGetContext(hWnd); //取得输入上下文9 p  Y) n( f  ~1 l% K
   if(hIMC == NULL)
( C# |. C* O, d$ }    {1 g' ]& b9 O0 K- A9 B
       return FALSE;- ?- l9 A! n' a9 s: f9 m+ c$ _
   }
4 b5 I' C# p3 i. K7 ]5 K: ~" j2 j0 i  W6 t- s! L
   ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );- B1 j, }/ m& u, q5 f
   if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) ' v7 g, f/ X! D0 |. Z! s
   {
% O' O# Y, o' V+ r        m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
, Y0 R$ d( U( Y) u. m        if(m_lpCandList)& l1 s% ?1 |8 a7 S3 r5 d2 e4 d
       {
- W* L1 f/ F. y: J, W            ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
! @8 B. G; m7 d% q; {            CandidateToString(m_lpCandList);4 @& @6 W% Z$ O  t& m
       }- a5 M/ T5 T# F2 r1 D+ O
   } ) ~" w3 S1 }7 z' ]/ f* f
% W% X% O5 y! O) W0 a4 N
   ImmReleaseContext(hWnd,hIMC);
) ]) _  t+ }9 T" r
# H8 o3 B" Z. g    return TRUE;
9 P0 |! L- q! z: b}4 V8 i9 j+ ]. T

3 }8 ]& b* h4 `( U. lvoid CIM::ClearCandidateList()4 n# p8 ~1 a* l
{
9 n, s  d  A) f& G: D* i+ C! B    if(m_lpCandList)
6 I. K+ R) @7 W    {% \1 Z3 ?( S$ U& m/ `  O: T* U. {
       delete m_lpCandList;
* r$ c$ `. {4 P9 o; p7 S        m_lpCandList = NULL;
* X$ k  x( d5 m2 v7 A8 a! ?( S    }! k/ \( m# `5 A# v  B
   ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );2 }' {/ u! g8 p
}; M4 `3 f- u# t/ r: g- L, e1 S
, }2 Z$ {! ~) u
$ s' u6 i& G% ^
LPSTR CIM::GetCurInputLanguageDesc()
& \( n: ^% h- a{
% ]3 |; g2 B0 e6 _3 e    HKL hKL = GetKeyboardLayout(0); 5 A; i4 _- i. Y: P, g; p. g

3 |3 j" F) C5 A' z/ m2 K    if( m_lpszCurInputLanguageDesc != NULL )
  m, P  |% B! f# H8 [- T, y        CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^
5 \0 M7 B  m' n4 C% g$ b, H7 O4 d, N$ M0 E9 C( ~2 m
   int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
0 v0 |) z; ^" m$ I6 k1 }/ B" W; f" L) l
   CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
' e* P1 D" e7 R) {) T: m8 d( q" C3 ]7 g! e/ ]& h
   if( lengh )6 Y. a; R( f* z5 b! e
   {
0 b0 q9 V+ Q: i- B        ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
8 C, I' s7 n$ t. i    }
. i( `9 ?! M& \  x3 H7 Y    else
& H# N) @: E% G' h9 p/ V    {
$ R3 s; n; b, x5 h        strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );1 U  E- c+ ]& M% n2 P" }
   }9 q; L; E7 F7 Z1 }% P  R
2 h' S: Y+ W8 u0 {  M, \: x# E
   return m_lpszCurInputLanguageDesc;3 |! k; m  h' r( P# [# n# n6 m. |
}
" I- ^. i0 H2 n, e: f
6 m/ E1 A: I: K/ Svoid CIM::UpdateShow()) Q% ^* C2 i, s; f+ J
{) ?$ I6 U  V4 H+ v2 L! |
   POINT pt;
7 @3 ^4 e, t7 [- `9 f    pt.y = 450;
( F, C; c% I, f# K+ M% d    pt.x = 400; 4 Z( N- T$ [' k$ ^. q9 i8 B; F
   ttffont.SetSurface( DD_GetBackScreen() );
0 v3 _: U0 o& [- H/ z  h2 Z9 T    ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述& n: e/ j* B4 b/ c$ L/ A
8 k+ V' a/ r( j( ]0 m) Z
   pt.y = 420;
/ W  J7 d: Y! t5 t* y+ q- ?    pt.x = 20;
8 {' \8 t( n" Y% C: ~4 c    ttffont.ShowText( m_cCandidateList,&pt );
1 Q$ j7 `, q/ K- S9 o$ c" q& ^
% T4 t2 d7 E0 G, x" K4 U7 ^6 v    pt.y = 450;( |7 O* }  U' u9 A
   pt.x = 20;
" {: I7 l( d% A5 V* O/ Y  G$ Z; I    if( *m_lpszImeInput == '\0' )+ M' P' V+ W' a" t
       return;+ {& U; [5 G. g7 _' w
3 S. h3 z6 u4 x% z. @
   ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
/ _! R9 d; k: c7 u$ v}
2 i3 f% C; T- ~
6 m* m0 t2 j! Y) s9 m5 f) W7 k0 iLPSTR CIM::GetResultString()1 W/ K; ~' [2 f, A' E
{
9 C; C! P+ t6 G2 p6 [0 g" Q! f) Q    return m_lpszImeInput;. a( Z. ^- m/ a! A
}
. Z& B) i# C. e: O  [. }* B* {: M3 B: }( r7 R( G
BOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)
) N: k7 |' }" X# e% Q! V; ^2 V{% P! b; m& R) d
   if( !m_lpCandList )
8 M% R: d! u) F% F% T* ?        return FALSE;
6 E8 c. e( E9 T+ S6 b
, N9 G" O+ Y$ u% E7 ?5 ?/ i    if( m_lpCandList->dwCount>0 )! ?5 l' K$ Z- g
   {4 H: E6 J% H* u5 E6 k
       LPDWORD lpdwOffset;" a& n4 F3 D  S! _# m
+ y( z% X6 w! R9 ?
       lpdwOffset = &m_lpCandList->dwOffset[0];. D& B. d6 a! L/ U0 F

9 h' D$ {& Q" N, f, t! c        lpdwOffset += m_lpCandList->dwPageStart;1 t8 f0 T8 F4 M0 [( \

& \* z, }4 J" W- C8 a        ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );
6 {+ m9 ^; k1 N1 @  w2 V3 |6 r' C$ f7 d. `- }; K
       DWORD z=1;
' z" v% o$ Y. i, P% \' j" t        for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) 5 T9 E0 [9 g) ]$ Y, B2 O. n  Q
       {
4 Q0 F" e* Y7 w            LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;. l* ^+ ^0 Q8 A5 p
           char buf[255];
" h  U% J8 h6 `5 \. O            sprintf( buf,"%d.%s",z,lpstr );( _+ h/ }. c& L$ o. [
           strcat( m_cCandidateList,buf );2 ?9 N$ @4 U/ Y1 e  ~  J
           z++;+ T5 m$ W; E6 f5 G7 y
       }' I( R" U! c- R; [0 a
$ M( K5 w5 Q' R4 ]8 q
       return TRUE;
8 M6 Y* d: C0 {8 h: g2 ?* }    }+ X6 p  p' M% y8 d- g

# t( G' j. Y# U4 h( H    return FALSE;
- y0 U- Q5 ~7 F7 B2 d# x& e}7 J( f! c+ q/ V* O( W* v

7 R5 m) m' t3 P5 |! P: sBOOL CIM::ImeIsOpen()
7 l! Z* O8 H; v2 `& F, z{" {8 t/ a+ v( w% r, e  c6 S
   return ImmIsIME( GetKeyboardLayout(0) );# h: B. Q% |: [0 A2 u
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 09:29 , Processed in 0.016770 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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