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

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

[复制链接]
发表于 2005-5-16 14:49:39 | 显示全部楼层 |阅读模式
  //******************************************************************//4 H$ H6 k1 Q7 i; e% r4 e: @  |
//
/ K" a/ z2 L, ~- G// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家/ R6 s1 y# ^2 T/ o! s* t2 c
// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)3 d! C5 N3 r" G" v
// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net4 W4 k* w" A% |, ]8 l/ a
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT; l+ a% ?. r$ ]
// 为显示信息用,可以用其他方法替换如 TxtOut() 等7 M* D& M$ y, E. F
//* P, c9 |2 E( i/ U% K0 g, m6 t
//******************************************************************//0 P5 @' P7 Y8 O
2 d$ y& a# Y2 a9 d8 x% q
//////////////////////////////////////////////////////////////////////: ]9 x: {$ A) [" I0 i* ]+ j0 Z
//
, h, A  X+ ?$ k: [! W// IM.h: CIM class (使用系统)输入法类
9 J: ?( k, h/ E- `// 2001/4/30 Write by Jerry Wang
3 M6 g+ q3 b3 d& b3 K2 Y6 @1 g- B" W, P// 感谢大大鱼的帮助% {' m. f. o, ?$ j! g, B1 ~& l
// Need Lib: imm32.lib
: Y! k2 U/ ?4 I' I& g//  G- V+ v; q& m: G0 K( k% ~3 D
//////////////////////////////////////////////////////////////////////3 X5 b, v3 z; c0 f) B
8 @: i" o) g3 H! y* q& E
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)# H! w$ g  q0 l7 g
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_; F0 G5 `0 `' N+ x

4 @* R2 v# c; B& |#if _MSC_VER > 1000" w; X4 s/ N0 a
#pragma once
- G1 \  U/ i2 x6 f# C2 W8 K#endif // _MSC_VER > 10001 o1 k0 C' x" q3 K

) X& q! r" y+ F0 _  G- w( o#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数+ d3 G: V  G% {$ Y, L  p

' m) b+ x6 Z, {1 n  T7 k4 G#include "FindMe.h"+ k) [: Z3 L, C8 @/ F

" R/ @/ B7 t6 _) q# h( Q0 }class CIM
6 q8 o5 c: k3 }6 v2 n; y- _$ P{' `! e7 }9 ^6 w
private:$ ]3 O' r; M5 ^& h/ I, D- e4 I3 p& e
   CTTFFont ttffont;                    //显示信息  J  r8 V  B8 E/ e0 n
   LPCANDIDATELIST m_lpCandList;        //输入法候选文字列表% e% `. k" g+ ]
   LPSTR m_lpszImeInput;                //指向IME输入的文字字符串指针% P! L: i$ Q# O8 R1 m: a6 [
   LPSTR m_lpszCurInputLanguageDesc;    //指向当前输入语言描述的指针
3 [2 J7 @( \# w/ \' P# ^    char m_cCandidateList[255];          //候选文字列表缓冲区
$ f; N9 t8 G+ y* [    char m_cInput[64];                   //输入的字母, G% ?+ D/ L+ {4 N
5 i* u% w: }0 M" r3 n
   BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串
% [7 L$ c, F" W, }5 {( A( c2 H# r# R
public:9 i5 a0 B; k' d
% w% b, q5 F4 e( r* O
   CIM();
+ y6 t% b; ^  C: G    virtual ~CIM();% j8 V) K- Z) {1 m# z) J# ?/ M) L

: P% m3 e5 }3 h) N/ J: k: E/ d    LPSTR GetResultString( void );                     //取得输入的字符串
, ]/ V0 x6 U% C8 D% a$ ^# P# S8 R. M$ N2 M
   void UpdateShow( );                                //显示输入法信息
0 r" ^& u8 |% s4 M% l( s2 y
  f2 H& l9 y6 t5 o    LPSTR GetCurInputLanguageDesc( );                  //取得应用程序当前使用语言的描述7 W  I0 w8 Y5 D+ R0 @$ @
   void ClearCandidateList( void );                   //清除输入法文字候选列表, l9 c/ P+ g, `7 m* L
   BOOL GetCandidateList( HWND hWnd );                //取得输入法文字候选列表
) g: ?/ V* G; `2 y6 V( S" M% w    BOOL ImeIsOpen( void );                            //输入法是否打开
& `" X% g% [/ h" ]7 ~. k0 @3 R    void OnChar( TCHAR ch );                           //处理WM_IME_CHAR消息
: N" H+ B7 v" [8 ]+ b! V    void OnImeNotify( HWND hWnd,WPARAM wParam );       //处理WM_IME_NOTIFY消息
. c5 a) D! b# d" `- |, x6 u    void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
. \$ a$ x+ E3 j9 w+ O};. u  J1 `; w& K; g' _7 y6 `
+ z& Z& d1 ^6 y+ q! A
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
4 Y8 Z3 b) q  t+ z  ~' S8 x
% B' o/ z" @/ [7 t
) ^: d- a9 I  Y! m7 n  ^/ i4 G3 i7 p
' |" ^) o" E) @5 M//*********************************************************************************************//4 S7 m+ I1 P; r* M% j
! t. V' w& R! t/ p. G) R
//////////////////////////////////////////////////////////////////////
; J8 N. C' s4 J! C/ v6 X5 H* V1 w//
9 F2 }' ~8 f# r// IM.cpp: CIM class (使用系统)输入法类0 s' G- n! u; }$ M3 _' Z: Z
// 2001/4/30 Write by Jerry Wang
( B* l* v( f& o1 }/ q// 感谢大大鱼的帮助
) ?  ^; |) |/ B1 S- F// Need Lib: imm32.lib
- G0 m$ z# Z! W: Q% ^//, k# P/ R% U, U- _' v
//////////////////////////////////////////////////////////////////////( u7 h8 A+ q; F4 ^8 n/ Z
( `3 c' s0 P0 z9 M
#include "imm.h"
3 O  {- |7 @0 T5 m3 q# m) b% r/ o! U2 S) r) X4 j- Q# Y7 J9 u
//////////////////////////////////////////////////////////////////////" ^- ~4 t. Y2 Q
// Construction/Destruction
; m$ u- D) B) z/ k# B. S//////////////////////////////////////////////////////////////////////% o! q! ^. v/ R% J/ [, j

" e" ]3 E" S' {8 FCIM::CIM()
9 }4 l2 s; C" S* v1 X7 g{
3 A  B5 I6 R: v  D  d    m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
% `9 l; |4 w  U" Y; }    ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
& C7 h- O2 i. A0 g7 @    *m_lpszImeInput = '\0';
( L% o. g+ d8 N9 N    *m_cInput = '\0';. i" Z5 f1 q! t

6 C  ^6 H, r1 w! O    ttffont.Create( "黑体",15,RGB(255,255,255) );
7 C) ?" u, a4 F/ m    GetCurInputLanguageDesc();. g7 |, D& C/ D0 ]
}
+ h! ~8 Y- z. ~! K9 D7 V$ T0 h$ D: k* C2 j3 A$ H% p
CIM::~CIM()
, C5 G( W# q# ~# w  o; C{
  l9 x1 ^3 J3 F  J& R/ c% V    ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );0 \' Y# i6 z; b5 Z% [. p) T
# m  R$ Q/ a/ t4 h7 {( A0 L9 |2 y
   CHKB( delete m_lpszImeInput );
- s% a! L% r5 E. W( D' b3 X    if( m_lpszCurInputLanguageDesc != NULL )7 V  f" _# ~6 f9 h& B
       CHKB( delete m_lpszCurInputLanguageDesc ); 8 T# }8 U: Z) F2 S  |/ P
}
$ [4 {# w% k  B. _+ ^0 S' Z3 w8 {( {9 i* w- m) L8 |& S
void CIM::OnImeComposition(HWND hWnd, LPARAM lParam): P2 V, q' K, H& L, i
{/ g) L3 T3 r: J  Y+ L  o2 c
   if (lParam & GCS_RESULTSTR)
* }# F; v0 t- x' I6 i4 Y    {
. F" G* [& [# r  |        HIMC hIMC; //输入设备上下文  t: U- h9 |- q+ K
       DWORD dwLen;
( }3 D" I. D* o* k+ d; k- Q! o        LPSTR lpResultStr;8 D) _0 t1 w' P0 N* u& m

; E" v" O" y$ U- S        hIMC = ImmGetContext(hWnd); //取得输入上下文
. m6 w# j3 c$ v5 t2 l  F1 c2 b' g4 E; y# z# D. x& P, }+ l; J
       if (!hIMC)
. D6 K+ ^7 Y/ S# A9 h1 P$ i            return;
2 T: i8 l6 Z! L
. F+ Q9 Y* q" [' }        dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
6 \& B- v6 Z, ]' ?        dwLen+=1;
6 F2 [/ C. d# p2 H1 d4 @% l
- [0 }5 ]2 z8 l0 X4 w& g        if(dwLen): }8 D8 m9 R& W' G# B) L/ M5 I  [; I
       {
; X# h' q8 S5 I; o* D: k  N            lpResultStr = new char[ dwLen ];
5 b& u8 E5 T# s/ s+ d
8 D, T: z3 ?. z6 v, b# s8 y5 g            //// 缓冲区已经满了% f$ o$ c9 ~, S
           if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )4 |+ x6 r8 Y( j# z! t2 W8 f
           {
& d+ h& R; g9 V5 `; G                MessageBeep( 0 );+ u& ]: g& S4 k0 m# o1 c
               return;: [: `7 F* }6 c
           }' G; ^0 V/ g5 ]' ?
           ZeroMemory( lpResultStr ,dwLen );
9 S/ f" u$ \+ a! m            if (lpResultStr): O0 A2 ?! m/ z$ |2 k' R! W
           {
5 w9 F% `- q  J" _8 t* E8 i9 r                ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
) M$ \5 @7 P; ^/ O2 g4 \, `' ?                strcat( m_lpszImeInput,lpResultStr );
1 Q$ y# U4 s9 P& Y/ i            }
4 P' u' J. \* D5 v  z            delete lpResultStr;
2 C) G# ]2 ?* c9 G/ ?, t        }
5 a" q5 W6 m% a; D" n
4 S0 z  n; S1 ?( U        ImmReleaseContext(hWnd,hIMC); //释放输入上下文
. C3 X9 d& z, x% M3 L% z) T) f2 N    }2 F( N: t9 a$ b; q+ l1 R
1 Y0 L: J* O5 u4 C
}) O# y" E) ?6 c5 {" T  H, k

5 ^, E, X' m, K% j4 w8 Qvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
6 D& b$ h: |/ N4 O  g* F  i; z( W{
6 `) H; q( h; U+ K* {    DWORD dwCommand = (DWORD) wParam;* P: ?8 A5 V$ T4 i6 p$ c
   switch( dwCommand )
' S" w& D1 ]$ ~5 q9 g# o4 _4 t; Q    {
0 u$ \$ l9 ?& Z0 c1 M% e& M    case IMN_CHANGECANDIDATE:9 Q7 h8 f7 _0 [8 d" v) ?
       GetCandidateList( hWnd );9 }# F$ d5 |& B7 F' H+ V
       break;
0 \! W8 Y# S& M8 ?+ X/ l+ u6 C$ M1 C+ l; M- j3 H
   case IMN_CLOSECANDIDATE:. @& R* L' X& b2 x3 H4 v. A
       ClearCandidateList();
2 P- {0 |5 g/ `$ B, j& L        break;7 n( B: Z  e9 x8 T: a: Z

/ z2 k! ?" l6 z6 T    case IMN_OPENCANDIDATE:
" q# f- a; |; V, _- d/ c, Q/ ]0 o        GetCandidateList( hWnd );# F0 L9 S9 j; W$ f- m' b
       break;
$ T9 Z& R- X" c    }
* b- w2 X6 O/ l  e3 Q3 _: b4 F}
$ S3 ^1 \; s& w2 |8 N( V3 @. l& K
void CIM::OnChar( TCHAR ch )
- e) U9 ?" i% n  ~* M{: g7 |2 \5 w! j! ]2 n" b! h
   int len = strlen( m_lpszImeInput );2 p2 E% y' g$ M9 o# k
. a3 f* L' b/ `, q! _( |, U# Y
   if( ImeIsOpen() ) //输入法打开状态
, ~% ^& [0 X; X  N  z' C, y    {
3 b3 r8 N7 _% R% n
$ F, f& n0 r, V( ^    }) _( ]' W2 \% a2 I
   else //输入法关闭状态0 p: }: b( v% F" i
   {
3 X! y) t5 B, R' Q        if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母, p9 D, u$ B" g( }  Z
       {
8 z. p2 G& a/ ]# g; |" d            *( m_lpszImeInput + len ) = ch;4 y' `' x7 P6 w, |" N8 l  s5 E" R
           *( m_lpszImeInput + len + 1) = '\0';
9 [1 D6 {- Z. K6 _( h# Q5 M( ?) {        }
; [5 P. c" G% Q/ i& R  H" o    }, }1 H# M# t% ?/ u

3 w. @( H6 K/ X- q" v( q8 a( N- u, {    if( ch == 8 ) //BackSpace字符( G) s" P: t0 g8 j( i
   {
# b- N  [6 m* K( G) h        if( len == 0 ) //字符串长度为零7 @) ?! P$ T/ i
           return;
6 u+ e+ G4 P( _1 `2 c6 }# o3 j9 z" v" V, D3 f0 D! v5 [4 }8 h
       if( len == 1 ) //只有一个字符2 \. I0 H: m: \' l$ J+ t+ l! `
       {
% T* \+ z' t2 N1 V, E& i& p) L- q            *m_lpszImeInput = '\0';
) ]+ L. n, @: E# ]7 l            return;0 [9 I4 g  N7 V3 k
       }) A2 M+ W  F1 K6 l
% V% E. N! ?: H
       BYTE cc1,cc2;& E" `9 h" Q+ Z
       cc1 = *(m_lpszImeInput + len -1); //分离字节5 @( `9 h3 _; f3 ^
       cc2 = *(m_lpszImeInput + len -2);8 \% a# A8 {* g* `; S7 D
( h( B- M! W- O/ N
       if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
$ J& }( y0 T: I* m3 Y            *( m_lpszImeInput + len -2 ) = '\0';
9 s. H- O1 F+ F. F9 e        else //是英文字符(单字节)
: ^2 O* B, F$ C+ @& z            *( m_lpszImeInput + len -1 ) = '\0';
2 l3 ?( y) K! g7 v0 O    }
4 c4 f3 L. t. K, {  W' ]7 y}& K' k  `9 q/ r

! ?* F, e2 o4 M/ B9 F9 [BOOL CIM::GetCandidateList(HWND hWnd)
: ]% {6 q( S- p+ s' b{8 F( j; M3 }& A; M& I
   DWORD dwSize;
' l% M* ?' a. P" [    HIMC hIMC;
0 m2 x% j  o9 ~* q. _
5 ^5 N, i8 }9 G  }, S9 @9 h; M, _  Z    ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
" m6 B! O# p4 }4 L' {: |6 q6 r0 R( z. ?1 w& F
   if( m_lpCandList )
: N4 Z0 k9 N; f    {6 ~3 H8 Z; t, z  c6 s# k2 E& ^7 \
       delete m_lpCandList;
9 _3 T; ]# H" z* A. A        m_lpCandList = NULL;) D; R/ E# X) l" e. }
   }0 X4 C( [! K6 J- b
+ B$ X7 g  X; l. M! T& F8 f
   if( GetKeyboardLayout(0)==0 )* @9 |' B  u5 s6 e" m: o
   {1 g& n. t) X' H" v8 X9 h
       return FALSE;$ r. d# \/ B1 N$ ]! ^. Q
   }
5 t: x2 z% ~+ f3 Y: p& ~0 D( i  T, o) [) y- L: M! N" Q; ?
   hIMC = ImmGetContext(hWnd); //取得输入上下文8 }' c8 m: K, E, M
   if(hIMC == NULL)  H7 d% Q. g/ @8 D( K
   {4 x+ f8 J% K& Y* g% _5 X& J: L
       return FALSE;% ^3 b" \; o2 E1 t
   }0 w0 f) j. H% |) C+ u% e

0 d" P, Y' H* q4 _/ O/ m$ y    ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );% e3 [8 C/ n6 q0 Y+ q
   if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) " L% `/ P$ d  `) Z; S) B; V
   {1 T. {% |3 w3 A! L8 B; z
       m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
# D9 r. W/ k5 I0 _- n* y8 e        if(m_lpCandList)
% y  h* K+ t. I7 f8 i# j$ D        {
: d7 P/ O; {8 D* W+ o1 Z* _            ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);3 C5 z/ |* ~! A, K+ m
           CandidateToString(m_lpCandList);
* ~: _; u6 W6 X" {        }
; Z; I" A, n3 H$ T    } 7 Z9 L; A  Z# N% z! b& N3 u2 ~

8 w; y; [( p. z3 C& ~0 G  p" k- v! E    ImmReleaseContext(hWnd,hIMC);
. C) G+ Z+ g3 H( d5 m) Q
# H. A4 I- r. ?    return TRUE;: E  ^  x. Q" v! v2 P' ~" w4 v
}$ f+ x$ g) {( m5 M

' O- s9 P: R: W6 Z' o7 _void CIM::ClearCandidateList()
6 ]; O! L7 w; `{
! ?7 G3 d3 b) h    if(m_lpCandList)
8 i, R% H% E! ]% Q    {. z9 c6 D" \  P2 @# v/ q0 R: {
       delete m_lpCandList;
$ H' l# O  T1 J6 W; X: m1 P        m_lpCandList = NULL;* f2 A  O+ A: n; {$ ^
   }) q0 r* \, V0 ^1 l6 E4 J( ?
   ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );
1 B- H! c6 l" M. k: {}! o( _% m8 N1 f! o& r
* q5 ~7 j* B6 p/ o

3 e. t2 f" \' C- pLPSTR CIM::GetCurInputLanguageDesc()- U/ F7 Z8 f% ~/ c0 X  Q# N4 x0 Y
{
0 e3 k9 n5 @2 }! j1 R) R% z    HKL hKL = GetKeyboardLayout(0);
) q; B( |* @2 Z+ ^% D# q# Q3 k+ ?6 R
$ B6 g. R! Q: }    if( m_lpszCurInputLanguageDesc != NULL )) H- p- s2 f" H. w6 B
       CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^1 k, x( Q5 ]: j0 c- w# t; V; ]
- g9 u& r' x$ O* h2 {9 {7 d
   int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
8 R0 K0 M& o* J5 x  Z4 t
, N  H( z6 n3 x$ b1 c    CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
5 w. Z- u; X  M* p  b4 J8 J' a# N" j  [5 U" D$ R  S' v
   if( lengh )$ {1 d1 x0 i+ }" Z5 k
   {
( r, B: i  A8 f        ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
& J& e6 R; A1 T4 D* G" G    }
7 F% U$ t# S% a+ S7 _    else
! H  h: b3 `; J. n6 R2 c  z% W    {
' V) r/ L6 y0 |        strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );: J% n4 I9 O. ^5 r/ h2 b; z
   }! j: Q  |* @2 a0 e& v: B
+ d# Z, w8 W7 C5 B2 S
   return m_lpszCurInputLanguageDesc;5 V( I  L4 ^% N9 L% b; |
}4 ?/ Y# t8 U" D; ?
% `5 X6 C3 ^! I+ x% |; E3 k6 a
void CIM::UpdateShow()& ~! {! b+ h7 H9 S. n/ d
{/ v* _" a$ _0 ~5 n5 Q
   POINT pt;
! d7 B% S4 O/ s$ }) @/ C    pt.y = 450;8 t- Y" R( D! a3 e
   pt.x = 400; 8 n. F4 B% @/ K, }
   ttffont.SetSurface( DD_GetBackScreen() );; Y4 ^: g; H2 w- ~0 D, Q. M
   ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述
$ i9 z% ]' p! F0 ~( U( T, I* R! _
" x! t2 ]; y4 m" h    pt.y = 420;
9 U9 s* ^' ]4 @# y1 F    pt.x = 20;5 P% g' w: |2 X- e/ W( C
   ttffont.ShowText( m_cCandidateList,&pt );* K+ E. B) g  m3 r5 [; d9 B" V" K
. F- h$ v+ _9 n. }+ K, L, w
   pt.y = 450;
+ t4 T3 j" q& ~    pt.x = 20;
5 k# r3 d" W" h& Y- |    if( *m_lpszImeInput == '\0' )
3 m# C7 K) U( j) ^        return;! K' t' Q* k9 c; V! f
2 S' N: G7 Q: ]
   ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
, V6 q, ]5 Z& @% v6 M/ e}
8 D0 l3 \1 \+ J! e. }$ J
+ ]3 R- g6 l; m! ^/ p5 A' ~LPSTR CIM::GetResultString()
( Y0 S1 r4 Y* r{% \; ~2 ~/ N' x% E) v6 Q
   return m_lpszImeInput;4 v; m# B' k0 I. O
}7 X. E. R$ [/ W7 T. B. k8 ?0 ]

" _1 N5 Y6 f3 j' ]* ]; yBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)7 `/ O2 b6 @3 U6 p% m
{
  i3 p. `$ v# E9 k. J7 q    if( !m_lpCandList )
4 k5 \. r% t/ `% m7 j. V6 _        return FALSE;
3 s* Z2 V' G( R5 B6 _$ @( b
  }( F+ m, {% p, r& q    if( m_lpCandList->dwCount>0 )" c) M. A" }! w1 P% p1 H
   {3 ?' z2 ?# f/ s/ W3 V) r
       LPDWORD lpdwOffset;
7 j2 @" H1 H$ K) U
% b+ l: r5 ~6 s1 K1 M        lpdwOffset = &m_lpCandList->dwOffset[0];% ^0 G0 P& a! E2 L5 X6 X# }
( K4 n2 |+ G, Q2 v7 Z( R
       lpdwOffset += m_lpCandList->dwPageStart;
: U4 [6 a  e/ v1 R1 B$ ~
6 {) _5 [* e) u1 A        ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );
$ M" t; f0 Q# B, @% ]5 N, L# {& Q5 C9 B  }( A8 X7 n
       DWORD z=1;
5 d( c* X4 _/ l% \        for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++)
5 A! ~" T# T4 |. M: E4 ~# I9 l6 [7 B0 Y        { % A; N+ C' ]; q9 C+ ~0 C! [5 B0 M
           LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;
2 G' x9 m" s& V! k# n            char buf[255];4 N0 V/ K9 e5 O
           sprintf( buf,"%d.%s",z,lpstr );
+ \+ P* [6 ?  W3 Z/ L            strcat( m_cCandidateList,buf );2 X1 G1 F8 c0 q+ R# c  o1 f
           z++;$ \0 B" y& P8 Y* @' Y
       }
3 Q. E+ v$ g2 O- o7 ?& D
6 ^# @" J. C$ E! Y) T        return TRUE;
. X( n/ F9 v- G& H$ ~6 o( ]    }- m& w) E! k# y- P" n0 R9 c* F

' h) j& t4 I3 g; h: L  a    return FALSE;2 ?& ?$ h! i" \
}* m/ C$ R' ]2 Y1 U* f
  U  M' X0 d$ r/ N
BOOL CIM::ImeIsOpen()
1 d1 C: i7 [3 S{
6 \3 R: _+ w  H' i! I    return ImmIsIME( GetKeyboardLayout(0) );( m( v  ?% C. }& O& |
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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