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

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

[复制链接]
发表于 2005-5-16 14:49:39 | 显示全部楼层 |阅读模式
  //******************************************************************//
: B' `: o. M- E& U) f) u//& i) r( `. C. M9 t0 M( u
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
9 }& q. Z- j' C0 x& i+ a// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
$ g( _% `+ m+ G9 |, f6 a8 Q: g// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net  n+ T! M. x3 F# P
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT, [  V2 T" H1 J5 l* `  `( k* h
// 为显示信息用,可以用其他方法替换如 TxtOut() 等6 x3 i8 g3 |* b! K4 }; y9 s8 `. H/ s
//! H+ A/ _' z2 @+ n5 x7 l% I* N& w/ @& w
//******************************************************************//
/ B# d; v6 W. Z
7 s4 m3 ?% K2 _/ r5 r! _$ C7 v//////////////////////////////////////////////////////////////////////7 L3 K% T: J( k$ |9 R
//: |5 K  q6 Q) S- M
// IM.h: CIM class (使用系统)输入法类! q& Y6 F) K/ U( G+ q  _
// 2001/4/30 Write by Jerry Wang
4 c- u1 c' g+ D% `$ r( G// 感谢大大鱼的帮助0 f* g8 Q" ~8 |" h
// Need Lib: imm32.lib8 }; b- I4 R" F- ~0 Q* e0 T
//
( I6 J1 E2 R- Z$ N3 c" y# Q//////////////////////////////////////////////////////////////////////% I# Z0 t0 Y2 x- @! c

7 E& G, Q. s* R! \, M#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
9 l( q0 l  ~6 ~) X0 o  A#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_2 K- z# p! B6 h# p( F$ l. j, i
  Q3 U! {1 M. [5 c8 I
#if _MSC_VER > 1000
+ d0 G  c( _0 L; M. x2 i* k$ U! O; F#pragma once9 k  Q* Y' R; |+ E) O! j0 r% v
#endif // _MSC_VER > 1000* _" n6 W; M4 p+ g; ~
, Q% D2 R: {7 ]  {5 @
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数
3 u" Q7 `( K: V. M4 u% F
, u4 W8 i( t; k3 v; z1 o2 w#include "FindMe.h"! ^' M" B( ~- ]! ~" L+ ~

7 ~, D9 G1 A, L. a' \class CIM
+ V% |1 L0 e! h" B% k% S7 x{" q1 K. u6 L# W- Q: f
private:
; V. c" y; a$ D. d8 |5 E2 v' C    CTTFFont ttffont;                    //显示信息
8 m8 o( k: C% z' X, y  A    LPCANDIDATELIST m_lpCandList;        //输入法候选文字列表
1 y, G; _1 Y4 k; h( H7 _$ j    LPSTR m_lpszImeInput;                //指向IME输入的文字字符串指针
. y# w  _( D) Q+ \    LPSTR m_lpszCurInputLanguageDesc;    //指向当前输入语言描述的指针* M* S" u1 a1 e
   char m_cCandidateList[255];          //候选文字列表缓冲区
! q& E/ }- m) \$ N4 F    char m_cInput[64];                   //输入的字母
7 j! c# p/ M: h3 H! b! q
1 R9 @, E2 S9 x/ r* ?: t1 c    BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串
0 ~4 w* T  m  w8 w: J3 P) ~+ k+ h* a) Y; f/ [! e
public:
8 E7 s# S; u" w1 \8 ~2 m* G
6 L; T+ l( C9 d5 d, \+ J: ]    CIM();
' M' C* h+ }7 P+ g# q. d    virtual ~CIM();
0 G. x% v6 b; q4 Z6 y/ k8 C6 u
" |( \6 O, i( H0 Q# b7 `, j0 d9 x    LPSTR GetResultString( void );                     //取得输入的字符串" F5 M) W3 z' U8 }7 n" v. w5 z: C

2 u1 u) r! K4 e/ w: M    void UpdateShow( );                                //显示输入法信息
4 E  R8 r3 I6 G# a! o2 `( |: ]! v1 \9 M' O) ~" V* Z
   LPSTR GetCurInputLanguageDesc( );                  //取得应用程序当前使用语言的描述
6 s( S* j* R. J, l' g% v    void ClearCandidateList( void );                   //清除输入法文字候选列表
6 z+ O2 J2 v- x    BOOL GetCandidateList( HWND hWnd );                //取得输入法文字候选列表
# N; w, [6 E+ a7 N/ k& b    BOOL ImeIsOpen( void );                            //输入法是否打开. }( W# ]4 F% H! c4 t( l
   void OnChar( TCHAR ch );                           //处理WM_IME_CHAR消息
$ ~9 h' V2 s( ?4 ?1 B/ p    void OnImeNotify( HWND hWnd,WPARAM wParam );       //处理WM_IME_NOTIFY消息
' D1 C9 C; y/ r" ]% u7 z& _, R: e    void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
2 ]9 B' g0 G. _};
; u4 l2 t" U! C5 \; b1 h( w' l( I1 H9 x2 ^
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
1 Q+ J3 x+ h. x- b9 O5 i9 I
- @3 q; S5 k. {7 L% [6 Z1 p8 y, X& A: N9 H, X

' |; `1 S! u6 ^6 s//*********************************************************************************************//: D4 Q4 {1 I7 j* T4 i9 ]
6 L5 K$ X& s6 Y+ G! B; j) ]$ _5 V
//////////////////////////////////////////////////////////////////////0 D) g. P& M  \, c( s) X" [: m
//5 t7 v, C+ E( R3 e/ a& r! n/ q# p, A& @- w
// IM.cpp: CIM class (使用系统)输入法类
1 ?% l0 q. T2 f7 z% p1 L$ v& H// 2001/4/30 Write by Jerry Wang" L7 `* D" v! G7 U) p
// 感谢大大鱼的帮助3 i1 k6 s% e3 i, \3 r
// Need Lib: imm32.lib
; f4 `8 ^- v5 Y1 g% Z//
# E8 [( F! g4 g( L+ N//////////////////////////////////////////////////////////////////////2 m8 i, q1 \2 r9 \( L

5 C, K# Z# l$ }0 j5 f#include "imm.h"& T3 U) `& @* d* u
+ H7 g( L5 k' k, C! s1 c& ~2 E  c" z
/////////////////////////////////////////////////////////////////////// A, R2 x$ u" G0 o" s
// Construction/Destruction0 a0 d# s' H7 e4 I' X5 _
//////////////////////////////////////////////////////////////////////, s8 M1 L' B; q9 X* s7 ^
% U' g  f" S( H: W9 c- t
CIM::CIM()- |* i9 P* b% r" @$ Z" e
{
4 A7 o9 Y/ |5 j* ~" d5 X  ~+ O8 H# a" J    m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
+ O7 ?3 e3 ]6 g/ d( ^    ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );4 \6 E+ X1 ~* I; O
   *m_lpszImeInput = '\0';3 m2 B2 b. ~5 W, K, t: k+ Q
   *m_cInput = '\0';/ E/ h# d9 N8 b. \# |
! H  c3 L9 x, S3 u/ ]) g( w$ U3 {1 I
   ttffont.Create( "黑体",15,RGB(255,255,255) );
6 x% v, B# s" M  V+ B" \7 A    GetCurInputLanguageDesc();, [& v, H" H5 z5 Y, W; \3 i0 d
}1 @! Q$ W7 e4 s2 Q' C5 ~
3 \. i! b" i" Q$ U- R. k4 a
CIM::~CIM()7 b; F% H1 w, Z8 I
{9 a$ h( ]9 U0 i! \8 w0 j
   ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
9 k" P  B# \  t# S' P0 n; J
$ V; U8 Y& I! q# G* s0 s    CHKB( delete m_lpszImeInput );
5 n4 T5 G4 M( O$ }    if( m_lpszCurInputLanguageDesc != NULL )2 S5 a) R& _, Z! F- p' |3 x
       CHKB( delete m_lpszCurInputLanguageDesc );
* E, J! Z" K, f( S2 a; Q}# [$ {& W: _6 @
2 T8 R* w, b% a& K: |6 x. _) y6 h
void CIM::OnImeComposition(HWND hWnd, LPARAM lParam)9 C' U( g5 ]. h
{
6 D0 r3 A; h; j# k: J/ o0 m    if (lParam & GCS_RESULTSTR)8 P$ T) T4 ~: k8 V$ J8 A
   {9 C0 |' N$ w: ?- S. b
       HIMC hIMC; //输入设备上下文/ Y4 F0 n+ S- @
       DWORD dwLen;- ~8 g9 q( @0 j# S3 \# d: _
       LPSTR lpResultStr;
" f( `2 E, ~# A$ m8 \" m" P$ J. ^0 b% D
       hIMC = ImmGetContext(hWnd); //取得输入上下文/ r, M* t  N% c
3 U# W0 ]- g9 v
       if (!hIMC)
' F! B4 n0 g& r& T  u            return;
: Y+ u9 k$ [5 ^! [% c5 N1 G  Q8 H. i1 z, N, R
       dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
  w! q: u  Y8 p, Y        dwLen+=1;# Z  M$ i# g* u' y: Q6 K; B

! ^+ A, o3 \( @        if(dwLen): ^' x- F+ E- J* j3 q$ M
       {
) d7 Q" e7 b4 I9 e6 `8 H5 l            lpResultStr = new char[ dwLen ];
: W0 t- T6 }9 E4 X& K+ Y! l/ j' I# o, P* N9 {& q$ w
           //// 缓冲区已经满了7 w; s. _5 p) a( K8 [$ ~
           if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )
3 z* C: ^" q( k' C7 L( X            {/ S! Q9 c7 a( ~7 k8 V
               MessageBeep( 0 );
# h7 U9 _% @% E* T* n1 @9 f                return;# i$ j2 x, u& @# O0 s
           }7 L# O! q+ q2 p% e
           ZeroMemory( lpResultStr ,dwLen ); 0 z- k7 u6 v5 w$ D
           if (lpResultStr)2 j& R0 y& {* z$ x
           {5 b& J+ N1 N2 M( S* Y: J
               ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);5 g" h" i+ q7 x$ K
               strcat( m_lpszImeInput,lpResultStr );. b# L6 q; F  N4 S* s; e
           }
+ y& L0 U/ o3 {0 I; l            delete lpResultStr;
4 c$ s* B9 \8 Z. @& M        }: k! l! b5 C4 l8 y5 A- N+ r: S6 |
* O3 U6 o! F% Z- [: }' ~; b4 l
       ImmReleaseContext(hWnd,hIMC); //释放输入上下文
3 x* V- Q: ]0 v  ]. }    }
! ?2 Z1 l' c$ }! B0 J/ T! d6 G& C: z1 \* v, p
}0 m/ O2 C7 n) _

0 G7 l* Q5 h& V! yvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam)1 T+ N" |( r+ B( ?( G( {
{, i& @/ D1 G, f: K( F7 j: Q* e
   DWORD dwCommand = (DWORD) wParam;; r% h# ^" n+ ?; L
   switch( dwCommand )
- W# [: t" u  ~    {
( M+ b$ t0 U8 E0 m    case IMN_CHANGECANDIDATE:
' l) Y6 j( Z( E9 M% ?+ |! N' |        GetCandidateList( hWnd );
# x( V" l0 t' J, `        break;7 b5 S2 e; d8 ^
% ?" P5 o8 M& L4 U: K2 J
   case IMN_CLOSECANDIDATE:' p  {# C% h& X8 \4 j
       ClearCandidateList();
4 B% I4 s) `' L        break;
, Y: q/ \8 J7 V
3 f' D+ h# b+ g' _. v' M" ^    case IMN_OPENCANDIDATE:
' h' ^2 A/ j9 l        GetCandidateList( hWnd );7 P, F* S: x) S0 k
       break;
% N4 J: A. K/ Q! P. z, f    }6 S. [7 v: y. O0 x3 B% J- E
}$ u$ d. J, I! [& v9 F2 B  M
4 `7 {! ]- ]' `; Z- G
void CIM::OnChar( TCHAR ch )
0 R3 \% x1 e' q" I, z' N{; |' S4 a2 U8 ]# N; X; r% W
   int len = strlen( m_lpszImeInput );( ?  p- `' C/ K  B) c- X+ `  ^

) Y6 `" k) S- A2 W    if( ImeIsOpen() ) //输入法打开状态
# `, h" j: d! D% B    {
5 ~2 G; A/ s2 F2 ^) @& w. _) g  c: Q4 y* k& o& r1 [( p( a1 |
   }
8 P" O7 S5 Q; T- y, I) b: n    else //输入法关闭状态2 N  y1 w2 S3 q9 d+ l
   {
& J0 N6 {) g7 E9 |7 X        if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母5 s6 A+ |, [0 C8 N" A
       {2 h, h0 a  w9 n8 _5 V; e
           *( m_lpszImeInput + len ) = ch;# k5 z8 s& x" I  X; H- k
           *( m_lpszImeInput + len + 1) = '\0';8 f, c5 b5 ?3 o( x" S$ k& ?$ K
       }# Q, U5 U& D7 w6 V( }1 O+ v
   }! D* K. a4 t6 A% p
+ m, R% P' k" V  a. ?
   if( ch == 8 ) //BackSpace字符
% f* w" X( C' [3 F* }: r+ G    {
8 z$ n- o: x: D5 P# o        if( len == 0 ) //字符串长度为零
& E5 G2 P: E$ l6 R. ?$ H            return;% U3 }: T$ R9 ~

6 u5 V# A5 c8 N        if( len == 1 ) //只有一个字符
* D) z7 f. ?, D6 @+ g        {
8 o6 j, a- g4 ^4 s7 ]            *m_lpszImeInput = '\0';# o; x' H/ M6 P$ b
           return;2 X/ y# P! p" O- ]8 ^
       }  @  m5 K* O  t+ z' Y, b9 J

, e0 |# ~# d! c5 v. A5 W2 |0 z        BYTE cc1,cc2;
, S9 w/ e# Z, z& C& }& v; W        cc1 = *(m_lpszImeInput + len -1); //分离字节/ _& L) {; N5 G/ v
       cc2 = *(m_lpszImeInput + len -2);( F* ?! u: s! J2 k, W/ K6 K8 \
, k% D& k: Y/ L6 B8 g: Q
       if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0! i8 U" }/ U: K, Z4 X. P; p" q4 f
           *( m_lpszImeInput + len -2 ) = '\0';/ l. r9 X- u5 L8 P( |, @9 ^* @
       else //是英文字符(单字节)
3 Q# E1 v' f; C            *( m_lpszImeInput + len -1 ) = '\0';0 u) T7 q9 [9 y) L7 J" t2 R  K* {
   }  _+ \1 o* o$ O7 P7 I
}; m( U, j7 u/ v7 h& w2 C; D$ _7 j

, o/ }% Z! y+ p' ], X& l9 EBOOL CIM::GetCandidateList(HWND hWnd)
' {1 J$ A- P$ E1 u, s. t{
' t, J% r$ J# Q- U# q5 A! A    DWORD dwSize; : O4 S0 l. [6 x
   HIMC hIMC;
) r4 M* t# T2 k& R3 W
8 K2 c; G0 A6 q# D: ~    ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
. P/ Y" _! g0 C" y" \
! s, b8 B9 x0 x, z! D    if( m_lpCandList )
1 V: S0 x; J0 \; d; z  m    {. G$ M) Q9 i5 [) E0 g
       delete m_lpCandList;
2 w" Q' f- N4 |$ G        m_lpCandList = NULL;
. Z2 F, n3 V7 w" `  b7 t1 {    }
) s9 K, p3 V( x% F# ?% l/ d: O( ~5 B0 H
   if( GetKeyboardLayout(0)==0 )
3 V1 W! D4 a8 k' ], N& Z    {
( v! M1 d. U) X6 A        return FALSE;) q6 y+ r0 r; k" q5 T" M  T
   }
% R1 P( U* s+ h. [8 d1 M. K. d2 @( U; u" Q8 p5 O5 a9 m
   hIMC = ImmGetContext(hWnd); //取得输入上下文, o9 I$ _8 Q4 b
   if(hIMC == NULL)
1 \+ z) J, p7 W; Y; H7 L( h2 ^    {
  _+ G, V7 Z! b; ~  Q, l' O0 |        return FALSE;
! w7 B7 A* G: C- {" Y- w/ S    }9 b4 a2 X0 G$ ^6 O
/ V2 D3 d: K  b2 f3 A
   ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
- G$ k% a6 H) u9 a    if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0))
3 q) a' W; m) N    {' }. t% f' ?) [
       m_lpCandList = (LPCANDIDATELIST)new char[dwSize]; $ Q: G7 v# m7 U" i+ K
       if(m_lpCandList)
+ X: j- n+ V7 K$ q# K* \        {2 D# G6 e& }+ B: i
           ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
4 i% p$ z/ |! }9 R            CandidateToString(m_lpCandList);# S$ j" }& ~+ o; x% Y* {& e6 i
       }
" Z2 O, V! c+ S5 \+ i+ `& [    }
, x; q7 r0 u% M3 e6 L+ y# N: r% n$ m% g$ g
   ImmReleaseContext(hWnd,hIMC);
$ {0 l8 p- S% U' n6 A
; v( s9 B- f. |& @" q% N0 r! C1 k    return TRUE;
. K2 C8 ~# i+ X8 f}
/ g5 t5 V9 Z7 b5 E2 g0 A( ?0 S, Y3 h
void CIM::ClearCandidateList()
* \3 p) K+ B; Z3 J4 J* I{
- t- x. }- V" A' W    if(m_lpCandList)2 u& u0 i+ Y3 s# s, z6 M
   {; W& F7 }/ p' Y6 ~
       delete m_lpCandList;
/ E1 c; M# [  `( c; t4 [0 L* ]        m_lpCandList = NULL;: K% S$ p+ v; [' B  q
   }4 c) z, D2 W  n' |/ P  N) C" ?
   ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );
8 D2 r# H& w4 }& u}# i$ l5 R  B# E

& Z* z3 n; x. c" n- x6 r7 h( u8 e# S8 B; u6 @) P0 y9 O( L* y, `" W
LPSTR CIM::GetCurInputLanguageDesc()# s- a) C3 A  }+ q
{
# T& B" Z$ H6 R  O2 e    HKL hKL = GetKeyboardLayout(0);
! g% X6 \  x( A* M8 v' p+ u* M/ d5 }( \. O# T( C
   if( m_lpszCurInputLanguageDesc != NULL )3 x# j% y7 c2 C1 {
       CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^
1 y3 j- c" \0 ]7 @' d8 h, \. |* @1 k* x1 T6 ]
   int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
' V0 a8 J$ R! s3 Q8 O
& A' `! F: h' J/ L/ K; N# o2 G    CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );( y1 G! Q8 |3 `: |0 r
0 z8 R3 D, _/ E. J' [
   if( lengh )
( i! E5 L- P5 r$ F+ @$ V4 ]( h: s    {
3 Y8 U+ G5 x% ]' @2 {& Q6 I8 `6 Z0 S& T        ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);/ ~* F1 @' G) d! R2 m8 g$ N4 C
   }
5 Z+ X0 z9 m, K) v- z4 O    else' W/ R. h- {8 P) A) L8 @
   {2 X9 A6 q; P2 f
       strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );# j% ?" E  S4 X/ S( f+ o9 @9 A8 D
   }; I8 Z3 B1 M4 @+ G
& z3 K0 V! k  ]$ W6 D
   return m_lpszCurInputLanguageDesc;! W# r5 r3 Y& X: G, f+ _- ]( j
}* Z: Q1 v, J' z/ I0 |

& N+ X2 K$ \7 R. |- Yvoid CIM::UpdateShow()- W% d5 G/ v/ _. U2 d: n" J
{( L) r1 ~+ H( v& @
   POINT pt;
4 x: T4 ]* H% P+ X    pt.y = 450;
* v) {2 K. R" H' J% n& p! L    pt.x = 400; 6 l7 b2 j! P" J/ c6 t" m
   ttffont.SetSurface( DD_GetBackScreen() );
3 }4 H+ @) p7 Z1 W# q, g: q2 N( h    ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述6 I7 g  a1 r9 f; H! H" X- v

5 `) a" A$ o. V! w    pt.y = 420;
& u0 g: _. p# r9 m    pt.x = 20;% c& n+ L' D0 P! x) F" Z' X$ n
   ttffont.ShowText( m_cCandidateList,&pt );
& T9 G1 Q. X( U$ U/ W
+ u) T$ e( S: @9 `: |  p+ B    pt.y = 450;
$ M# S- q' y9 l; _2 i' ~  {1 a% ?    pt.x = 20;; _# {& X# }% n' {' I# \+ w
   if( *m_lpszImeInput == '\0' )2 x- {  k  e& V' s% c
       return;& T6 g5 I! ~. G: `' Z0 C

, D' a3 c/ v1 C. E- }3 K1 M* B" L    ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字, c! m; p" [- u! Y8 j6 E0 [' c
}
2 D) J( y! I* P- J
" {1 Y1 M- C- R0 SLPSTR CIM::GetResultString()
1 C! f; T& e: H. }( X8 j{
$ E; `5 X0 i8 o# t+ X    return m_lpszImeInput;
  ]1 |) I9 ~4 K1 s' h# b/ ]* H. W}4 r. A$ t2 k- d, H" V, Z: S, x) @  t

8 O8 F3 p" E3 v% W' kBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList); z+ t' O* ], V
{' }7 S6 o9 y' O3 F; F4 ?3 l. p. }
   if( !m_lpCandList )
/ _+ N, ~; R) `8 O        return FALSE;
2 v  _4 o5 K5 M; |' g$ G+ @9 [( L4 @  l, a. x7 B$ A- D
   if( m_lpCandList->dwCount>0 )3 t, G  i( x2 }$ u7 h
   {- ^' r& N7 s$ t
       LPDWORD lpdwOffset;
5 c# K( E# J. g
3 c& s* U( t; g5 q        lpdwOffset = &m_lpCandList->dwOffset[0];1 G- a) H2 r' G: y+ I
& v+ Z1 b; n; Q) ?+ o4 w  h5 ?
       lpdwOffset += m_lpCandList->dwPageStart;: o( B3 _3 \/ N5 u# \

! A' w! |' N2 E2 [" M0 A        ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );* O. N3 n8 ~% m$ U" _- X2 j

" U# g/ e5 P1 \5 k        DWORD z=1;
2 ^+ n4 }$ z3 a# M        for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) 0 U: @! [! }2 A4 r
       { . M- D- {& h3 D8 K
           LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;% b7 r: `! P1 r, n# P3 J+ B/ A. E
           char buf[255];
, @0 t' m* D9 m            sprintf( buf,"%d.%s",z,lpstr );0 l* q+ _4 z4 n* v+ a) `2 r5 |1 G
           strcat( m_cCandidateList,buf );
: {6 y: r5 ]4 w7 k            z++;6 T# V5 B" K) s1 o* \- M0 k! N9 O
       }6 N5 w: x* t* n7 j9 q0 R8 n. Y

9 l+ j) b* J$ \; J$ S        return TRUE;
# j+ e" |$ n# A* k: s+ @5 i6 {    }6 d9 r) }1 v, j9 l6 Y

$ V# s0 U" X  ?6 ]' M1 b    return FALSE;1 _; |# P( \0 a4 z  a3 R4 e0 r5 B& m
}
% |( @& q. ~- o
# w% \3 v- `* x8 H  \2 YBOOL CIM::ImeIsOpen()
2 E! W  q, j& w- n1 q# S{
9 ~$ u+ N% X1 s# |    return ImmIsIME( GetKeyboardLayout(0) );& F1 C# `& j8 O& t$ X  q7 V
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 10:34 , Processed in 0.023275 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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