|
|
//******************************************************************//
) [7 ?1 y5 M) t. ~//
/ d z- Z8 h8 E6 y6 X// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家1 T) t8 R- C4 U; _) K( Q
// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
$ ~$ Z2 n( h- @( J$ B, F4 J3 }// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net) l7 K6 i7 o) ~$ @
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT- C f& f0 l# F
// 为显示信息用,可以用其他方法替换如 TxtOut() 等( v/ D5 @% w* Z1 t0 G; x2 H8 ?
//
8 \3 t* v5 G, l) M1 E- W( b$ m//******************************************************************//- V) v2 N0 c# \+ ?( o1 A9 z
6 ?4 ~* a M) q//////////////////////////////////////////////////////////////////////
1 U- w( z& O6 ?2 E3 B//
7 I, K! E. j6 Z# |/ W3 }0 v1 J- u// IM.h: CIM class (使用系统)输入法类$ ^/ j2 y% s$ g& o7 M: w+ \' ?) A5 \) t
// 2001/4/30 Write by Jerry Wang
4 ?3 x. V& m- `9 Z4 I// 感谢大大鱼的帮助
$ r9 |4 y: F: I// Need Lib: imm32.lib8 Y- E0 b/ K( ?6 W7 ]
//2 M4 | p* L* S$ A% w
//////////////////////////////////////////////////////////////////////
! o8 _" [' o: C/ r2 P" F$ J1 X$ h9 W% ?. a
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
/ |% d$ X) {0 W9 D1 u K5 g#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_% l* [7 S$ U. r5 f0 l
" O2 j! E' I! q8 i+ O0 k
#if _MSC_VER > 1000
/ w: R4 v5 }& j% u#pragma once: ]' v p0 G5 G2 R4 n; ~
#endif // _MSC_VER > 1000' c' j1 E1 E0 _: W. E* @. y
* o g- ^2 S( s# |7 X' ], n J, p#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数8 O* J# Y3 [7 N0 j5 ]
& H5 |. j" M& ]( J+ J) [
#include "FindMe.h" q M: G& @+ L
: |1 Q1 a" R7 [: X; C& B& }
class CIM & X3 c% \$ a+ Y( A2 I. e0 y- c
{) w" O# n# A; |! C7 s9 G" b; w r3 G' a
private:" U8 h0 ~3 M0 |8 l9 j; Q
CTTFFont ttffont; //显示信息
* \) M- o( I5 `0 H: g: a LPCANDIDATELIST m_lpCandList; //输入法候选文字列表! H" I& z0 b7 Y
LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针
* `7 y2 @' T8 M H" K% F LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针+ {' @4 F0 V: u- ]: i! |
char m_cCandidateList[255]; //候选文字列表缓冲区0 }9 V+ b8 R9 I+ E& n
char m_cInput[64]; //输入的字母# {! k/ \' I9 r* ^ E/ d6 R, l1 C
4 U8 ^ g) C8 U. o0 o* v8 H' I
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串
& X6 h$ k( |" Y: A+ x
P' M$ y. A# J/ v+ Apublic:
* y5 h; e1 v4 ~
; c3 `/ K g, @+ @2 E! K CIM();; ~6 M* W+ @2 I) l' w& M
virtual ~CIM();* P9 D% k* [( |8 | J
$ l2 g/ f2 x+ S$ I: ?1 n: d
LPSTR GetResultString( void ); //取得输入的字符串% S0 O1 y) H* g4 O0 [" e7 n
. O, \& ~- G9 `0 d! o8 n; L
void UpdateShow( ); //显示输入法信息5 E7 H5 M8 |# Y" E
/ f$ a- D# s* y- g; N9 ] LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述. y9 n1 D2 |& O( ?( T9 p
void ClearCandidateList( void ); //清除输入法文字候选列表% o) r& F' i; l. R
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表5 s: u: x$ o: i6 P' G0 Y4 x
BOOL ImeIsOpen( void ); //输入法是否打开; X) j4 E' L; Z
void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
. s* @3 V8 f% D. ~; J6 Q1 M. P+ B void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
& p4 M+ Q2 U0 m' @1 f m void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息% j1 j6 v0 [: y) r/ r: m, ~
};
f0 p1 ~% d$ k0 ^
5 T8 [6 B# N+ ^1 a5 X% i! {( ?; L#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
I0 |* M- c2 E- I
) E9 @5 {- g+ K/ x! p
9 x- _, V6 }3 L+ g- m. z$ A, B+ q( J0 _9 m% ~
//*********************************************************************************************//
# `# C8 E) X @1 i# U
4 ?) n+ J# |$ i//////////////////////////////////////////////////////////////////////
7 F' }0 Z+ X I& q$ i7 z; g//0 J! m1 ~$ g& O& H' }- ?: }$ O
// IM.cpp: CIM class (使用系统)输入法类
' V; E9 z+ u8 N; V) R7 `// 2001/4/30 Write by Jerry Wang
* s& e( J2 }( ]5 J/ b' g8 G// 感谢大大鱼的帮助7 }1 b- Y, T' c! M4 \0 L
// Need Lib: imm32.lib2 h& `. ?" U" H3 W
//
, t2 q' h9 Q9 q' r# z$ @5 Z' b//////////////////////////////////////////////////////////////////////
; K, s+ F0 _5 E B% M6 c3 O7 J8 S; K" u- i5 q% ]2 k5 U
#include "imm.h"
; J7 }/ ^3 m8 w" [
$ v ?9 H# l, B//////////////////////////////////////////////////////////////////////
7 W+ c) Z% ]5 ^// Construction/Destruction
% }7 f6 ~* c, O. D! M//////////////////////////////////////////////////////////////////////
7 ]3 q3 G% I. a! u5 y
j7 V! y4 Q9 k1 o8 |9 z7 ^/ OCIM::CIM()8 k i0 V# C6 e4 [3 a# m$ r* {
{ l( T- a9 W# O0 a8 Z/ m. x
m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
9 f1 P2 x7 L( ]3 b; f1 o# Z5 V ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
! F+ ^+ s, z. @* W) W *m_lpszImeInput = '\0';
2 N2 ^% t: s; \8 l; b0 e1 m9 L# S *m_cInput = '\0';# Q+ F' T: A9 v+ { w$ R
- H9 i* ]' t$ |% b8 @ ttffont.Create( "黑体",15,RGB(255,255,255) );
; h" `; F: F, a2 K& r! s0 x3 d GetCurInputLanguageDesc();
% @* [% J7 r1 ^: W) q. A6 R: O}
& W8 a- N L& G+ @/ \/ K- n# Q; Y* M1 N- g0 a: i
CIM::~CIM()$ T/ e) E( A7 [1 P: t; L! K# Q( C
{
$ h# R( g7 c7 N9 y! Z" g) i" o. H ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
1 \8 u/ V- B% O! N# o, r" B- {. \: n/ A5 M8 e3 ?- r% ]
CHKB( delete m_lpszImeInput ); 1 z- y) |% g' J# q7 h- e% R: ]/ L
if( m_lpszCurInputLanguageDesc != NULL )
" S9 q6 J2 ?7 T, p, Z7 ^+ \ CHKB( delete m_lpszCurInputLanguageDesc ); 5 y o# ^2 n( L$ u" G$ E3 d+ k; V: B$ M
}
0 d* H2 m& h8 \- Q2 ?1 m" t$ N0 W, m7 x. Q" k/ C3 x
void CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
8 [( P2 x7 b* l{
% w" x0 [) x) `* ~% i6 j if (lParam & GCS_RESULTSTR)
2 a3 [8 h# w' x; P {) d8 G( D% ~8 B! M) q5 e/ D
HIMC hIMC; //输入设备上下文
* v8 W0 s2 @$ s1 }, V" t DWORD dwLen;
9 b h3 W7 w m- k6 N. R' T; y+ B LPSTR lpResultStr;
4 k7 y; c, W8 A* I+ s; m- u1 [4 W! {" h- v
hIMC = ImmGetContext(hWnd); //取得输入上下文
1 ^, t" ]$ n# l1 p" h
8 f8 `) g0 r. t- X if (!hIMC)
' u+ I$ X# k9 _1 b return;
, T: h9 Z% R4 f2 ]* z6 _5 Z! |% B$ a. G( K
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
2 v' }9 ?; r; i/ C3 Y& A dwLen+=1;
* z! q. x( l2 e. M6 S% C) \
1 C- @6 k# k2 f* U; C, E0 d if(dwLen)- i3 T, |) ]( B/ X
{1 w3 ?, t6 U% f- C* P6 F4 G, Z
lpResultStr = new char[ dwLen ];0 s% Z2 r0 q4 n" H/ {+ J( K8 J
4 L p& i# w# G+ n, u //// 缓冲区已经满了% |0 b$ `. s% g9 n
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )8 X. l8 j/ n3 W; a) j/ m
{
# D4 B# ]7 ^6 ]: P: }5 Y3 a9 @ MessageBeep( 0 );" n% T: o3 }6 }
return;7 o1 l8 |' X4 }: G( D( I
}
3 x. ]2 I" u* ~; e ZeroMemory( lpResultStr ,dwLen ); v% v3 B+ r/ l3 B1 i4 L- ]1 k
if (lpResultStr)/ O$ o, k* Y# t8 M+ ^+ F1 z
{. n5 X3 [) b7 A1 N0 D9 e( D
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);; l4 {5 } k9 X* ?; a1 N/ s
strcat( m_lpszImeInput,lpResultStr );
3 {* i, ^: ^/ g, O5 I* Y! c }
- F" O, H6 U+ l8 { delete lpResultStr;
- g; h! B7 G0 O+ A2 M" p }
* S: s8 Y$ O/ }0 ]9 G
! N: q6 K2 B3 x1 ?- x% b$ s1 R( C; N" Y( k ImmReleaseContext(hWnd,hIMC); //释放输入上下文
I; u4 y, ~* q$ X2 a0 e }
: F( @ C8 y0 d! y; {( k
) p! {; h- w% l7 g}
1 u* t( X: _: U6 i. @
' y4 j" F+ B* }; I; Wvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam)* l0 b+ n! h) g' t
{
" J: s! \1 o9 U0 q DWORD dwCommand = (DWORD) wParam;
/ }4 E Z6 n9 v. ]4 l9 u! ~ switch( dwCommand )( y1 \2 R" O# a" D) N( y
{
1 v. } Z5 U1 Y8 n, n& Q case IMN_CHANGECANDIDATE:# }/ ^9 l; U* s& N8 {" U
GetCandidateList( hWnd );
; B% ~" F* h' N1 y break;
; \1 c8 B. Y2 m: w9 ~% q: o$ R- J" ]
5 [1 L. t9 K( o; T5 O1 ^ case IMN_CLOSECANDIDATE:8 e6 u- P( @! [$ _; P, o7 G
ClearCandidateList();
; z6 K; }; K- u: h, ~+ H4 j+ j break;6 S' R8 e8 @. ?# ^* ~# X
9 p5 p1 | w i; o3 Y/ d" V" t case IMN_OPENCANDIDATE:
7 I" X, z [0 ]+ `0 {1 ^8 ] GetCandidateList( hWnd );8 o+ x( |8 l( j$ [. J+ |
break;
2 p% E: A j9 I; s4 }3 f }! ^- }, X/ u9 H* h& ^
}
8 c# I* ^6 {, y/ P' C( n5 i2 |/ U7 D8 L
7 `! G6 r( Q8 u6 n9 Z1 P8 avoid CIM::OnChar( TCHAR ch ): P/ q1 [% R2 {- Y( I! p( G, }
{
/ _& @3 L" h2 z- l0 N" w int len = strlen( m_lpszImeInput );& D/ X5 m& R) e2 m
- l: [! k( ~- }
if( ImeIsOpen() ) //输入法打开状态
& A$ j6 I: S3 y& e+ i3 G' f9 X {4 l/ O/ H# }; l' W" M) [, E4 V
+ ?7 c" ]$ O9 @# ^8 m' R5 w; G* t
}
0 x l+ ]# _# |5 Q8 z else //输入法关闭状态
! C! y; Q* m) t k5 e {9 g. s, s( t* S5 W( _8 a8 S
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母
% [2 [6 f/ b- w7 t {5 \8 t* `1 U/ k, m! v3 g. e
*( m_lpszImeInput + len ) = ch;4 n6 K f& s2 a2 W% z6 E
*( m_lpszImeInput + len + 1) = '\0';+ b0 W/ O* c3 o" S5 z7 p
}
# y5 K1 W' k, @3 [( t9 \4 c }
: Q: ~% F( Y( T
* Y: b" w; J( t9 d3 {+ i+ }8 S if( ch == 8 ) //BackSpace字符$ O6 O; {: G* p; j# i) N
{
/ S- O( Y4 o- M5 R if( len == 0 ) //字符串长度为零
% u) j' ^3 s9 s. v4 \( Z return;; V2 V& E8 ?$ E
( Y5 q7 J5 q# B
if( len == 1 ) //只有一个字符
( K1 U7 c! \, ~ {
- f) z f; ?4 W* r *m_lpszImeInput = '\0';2 d& t% w% A, }
return;" j7 ^7 K, ^- ~2 Y3 _
}
9 D! i; G' s, t2 w* V* x( n5 a7 h0 N
BYTE cc1,cc2;7 l/ g0 M$ @% v- C; T! e
cc1 = *(m_lpszImeInput + len -1); //分离字节
; f7 @6 o5 S9 Q3 y# A6 s K cc2 = *(m_lpszImeInput + len -2);2 t7 l$ s, O: d; Z& M
% C7 B2 p+ i |/ o if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
. k5 |, @& z. b! g! k, @ *( m_lpszImeInput + len -2 ) = '\0';
K. V; d* O2 q" h" I, T else //是英文字符(单字节) N' d. _8 Z9 I# s
*( m_lpszImeInput + len -1 ) = '\0'; u4 g5 ?3 K/ G! P
}
& J- l: M* G" ]% ~5 v}
5 E. \- C3 e1 B- | A# r' H2 r9 u; }6 v' e
BOOL CIM::GetCandidateList(HWND hWnd)1 e7 n/ c( P3 K% Y: |+ u3 |3 _
{
Z& @: q8 n3 u+ q0 a DWORD dwSize; 8 V9 k9 M* V- ~* O! i9 E5 [: x
HIMC hIMC;$ J5 R6 P# V5 G6 _0 E
+ V J2 c+ _" Q6 h/ D
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );4 I$ C4 |6 h: Y: E& q- C0 B
5 Y9 o$ i9 l9 H3 L- T5 I5 H6 q if( m_lpCandList )0 F6 Q$ J6 O) ~/ ~9 ]$ m: b* `' w: p& @
{. r9 w+ {; q: g
delete m_lpCandList;
, L& f% ^: ^- w* I7 `6 Q m_lpCandList = NULL;' P0 t( [/ Y9 F2 S0 G2 D, p U
}
k( E! l7 K8 I& ?1 g/ W% l5 o7 `; q1 Z$ Q& b6 c1 {5 T
if( GetKeyboardLayout(0)==0 )
' I/ m$ A% t) @2 {. F- e$ K( a9 S {
4 M' H1 E. ^; f# F+ W5 O% i return FALSE;
* J* H, C5 n- S' X }; @+ X* p' t) \5 K$ h# ^0 [3 L
+ N, g8 t, E! Y3 D# m4 h. f hIMC = ImmGetContext(hWnd); //取得输入上下文% C$ i4 h9 l5 l, T' l
if(hIMC == NULL)$ C$ C3 `4 D7 x" q8 p
{
* r! g$ J4 Y5 y5 P1 u return FALSE;/ X" }. _8 G& @. l! V
}
0 O* O E3 A( l0 c& _) d3 Z X' X; b! \0 [
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
% I* T# {" N" h if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0))
: j# d3 n# P/ i {: h) T8 M3 u0 }$ p0 ^" ]! P; s9 M6 ~+ I
m_lpCandList = (LPCANDIDATELIST)new char[dwSize]; 7 }! ~0 f+ z5 F4 U& G
if(m_lpCandList)
+ h6 u j# M2 p9 K4 d) T {1 ^% f* ]7 C6 h, k; L
ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
2 A U0 Q4 d8 F1 [( G! `4 J CandidateToString(m_lpCandList);6 ?$ Y. `5 Y: }# I9 t* Z5 Z
}
5 f7 P$ ^1 x6 \ }
: Y9 B8 V [2 @0 R# K! ?. D; c' o$ P1 x# o
ImmReleaseContext(hWnd,hIMC);
: X7 S8 l4 r$ o8 {) ]4 D- _2 c" p( }) B8 t0 C Z
return TRUE;. D( W6 u8 n5 a2 v
}
& z' j4 I- p' w7 [
5 C! d' F) s' F) svoid CIM::ClearCandidateList()5 V' w; S, X6 D# q4 p
{
! G" J5 T# j% c1 A$ P. r if(m_lpCandList)7 l% H( E. d' Z
{
$ i G) e# r$ F* H delete m_lpCandList;
; `) h* Z! a6 I( U m_lpCandList = NULL;
/ Q5 o; ]( s) a2 j6 s }$ C k+ E6 @+ H7 l; t. r8 x
ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );
x% u$ m Z! W2 A2 i}
0 n; e0 S3 r7 k* ~$ P' T* x7 q9 \1 a' \" }1 ?7 c% ^7 X5 Z8 B
+ l0 D% b& _6 ]' U! M
LPSTR CIM::GetCurInputLanguageDesc()6 V9 ~* x- ]! i+ ~! ]
{
, v( w2 u. {! S$ y4 w3 ^ HKL hKL = GetKeyboardLayout(0);
! ]8 z/ `0 ^1 ~5 z( F& @
% A" K, K4 L5 M if( m_lpszCurInputLanguageDesc != NULL )
& t/ A; q$ c% O. }: C3 u7 @! _ CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^+ D3 u! g$ Z' u% C
; @/ z1 ~2 K% f6 i# d1 ~8 z; w& ` int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度, H, b; Z+ l6 [5 C' i. y0 |
2 g; N) L8 |0 |' G, ^ CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
; `3 y1 ?& W0 h" ]5 F% ~
+ r" H! a$ b' F" |4 X if( lengh )
- O/ O. U. x7 H+ k7 v; [9 z {
) P4 r5 K, d. Q; U9 k$ ^ ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);0 I/ \8 k: }& T: q( A* m; V
}
9 P" r4 {: |6 _, d else
% p! b% \: {% P1 Z {
5 Y: C D! Q- T4 B4 z( @ strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );
H# |( o, _, B) w/ k: i9 a( k2 t }5 e3 Q3 `! z1 ?( t' X; I0 O) i
2 I* O. G( s- S- E! J
return m_lpszCurInputLanguageDesc;
* d4 @6 K. X; } _3 e% C}
6 B: B; p% L9 @$ l- t! T8 H
1 |' N5 s; N0 h5 j9 Gvoid CIM::UpdateShow(); U( t+ t/ B9 z& r6 a$ g
{$ @! ?, H, G6 C6 q& O1 l; g8 I1 o( K
POINT pt; a. x& j0 W; x4 v
pt.y = 450;
" F5 ^ \2 A& j( P* ~( ^; K pt.x = 400;
9 T* M3 t' Z2 c/ H ttffont.SetSurface( DD_GetBackScreen() );
# L$ B( ]& D& O ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述1 o& |# M6 O3 z% p, s5 S$ h$ M
% G* j$ V, w; v, S pt.y = 420;% A h4 z0 l4 r$ N
pt.x = 20;' J) f% {3 n' e
ttffont.ShowText( m_cCandidateList,&pt );6 c$ \8 {1 j& u1 h. x J$ B. U' ?* }
; g0 E2 V& c7 n
pt.y = 450;
: U3 y& `8 \- N) S+ G pt.x = 20;
) O% l0 ~3 t' ]- c/ S if( *m_lpszImeInput == '\0' )
$ {* s: b8 ? [ return;
8 g3 g5 y4 R/ j8 L2 E2 x, _- V
9 \1 Y+ B7 M+ Y ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
- O9 ]( ]. ^. g* t5 ~; S& l3 V}
( i. j; `# i3 K, r
$ e5 x7 U) v6 g: F2 N/ F) g/ ?- D X% wLPSTR CIM::GetResultString()
5 ? o5 r l& F, v) B5 t* k{
! k/ E( D& s. P+ h0 c) p return m_lpszImeInput;
% ^* I* m+ L% X9 L2 b}
" z+ C2 m2 w" U% Q/ l& R' H" K5 t$ B" W4 g' }8 O, Q
BOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)3 s: `4 f; O' X) ^9 z: E6 O
{
* E# m1 p/ @9 q6 Q8 @+ ?) |# }* L! g if( !m_lpCandList )$ D; N1 i- q0 {" f( L4 [: R
return FALSE;
; X$ M8 R% E- Z: R& }$ S) G& F+ G, P. @
if( m_lpCandList->dwCount>0 )8 P: o$ i2 C6 V9 O Y6 Y9 K6 p1 P( _
{
6 R2 P. v8 ]7 W1 K. G LPDWORD lpdwOffset;
& p4 G, t3 C7 E! U3 E9 o( s' U: |, S0 N" d. f, W# N
lpdwOffset = &m_lpCandList->dwOffset[0];+ M3 _) Q Q0 N$ F# l+ i& I; T
; Z- h8 p9 Y& z K8 y L lpdwOffset += m_lpCandList->dwPageStart;
& a; \! H6 z/ V I& H3 g, R( U8 u
ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );5 S0 c! X1 G/ D8 D- {; o. F! r: v
( T3 Y8 q4 B( j! Z) V% P
DWORD z=1;, \6 [5 Q3 k& \# R$ C. C, c' F
for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++)
% a$ N( E- s$ n2 T2 ? {
: \, a, W' T/ Q* q# D! n LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;
7 {$ q7 @8 [- T8 L8 t% s/ {0 t1 } char buf[255];2 `6 [0 t/ v- @4 u6 n5 F
sprintf( buf,"%d.%s",z,lpstr );1 |6 ^; M: x/ d# w' N/ k
strcat( m_cCandidateList,buf );8 k) J% e( {0 B1 N6 c+ [6 s' j
z++;
2 h3 }; |- U$ ?( X U4 P: t* _( ~7 U }* [, ~1 f+ G0 V
' w2 l. _ A7 t- L: T; y( |$ q return TRUE;, y- M) h! {5 z4 f& i, _2 M$ h
}
" N. w% M* ~" }& A' ]$ ]
4 z5 n: v/ `. O, X6 S/ k return FALSE;
) C$ s; r/ W) h# ^; {( x/ @5 l}
; T X- T# h `/ a& {# o S$ G5 ?2 `, E& p$ ~
BOOL CIM::ImeIsOpen()6 Y% @4 }3 l9 f- X
{
( @' w' ]& j) o$ U return ImmIsIME( GetKeyboardLayout(0) );
! o- V f7 i" P* J' \} |
|