|
|
//******************************************************************//8 ]# F# y/ g- C! T
//
; {1 _7 ^0 F3 ]( s6 a7 M// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家+ E/ p% R: q6 j0 n
// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
1 d+ c1 B/ g3 K% q0 {' A" y// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net! w% ~. i: m9 E& g! u. U' I: V
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT3 y9 F1 q2 n6 u9 [0 a. N0 w U/ Q5 [7 q) \
// 为显示信息用,可以用其他方法替换如 TxtOut() 等4 r. ~6 I Q0 A9 B1 b" A
//
, Q- x8 e8 o) a# [! G4 F//******************************************************************//- V- e* b) h) h
6 f9 T9 \: {0 j# {( k
//////////////////////////////////////////////////////////////////////( O2 v+ Q, \+ ~3 n& V' p( I
//- S. ?0 l- y1 s# G1 O D3 g
// IM.h: CIM class (使用系统)输入法类
) m* `1 `- t( u4 @7 }, }8 Y// 2001/4/30 Write by Jerry Wang
) ^, z; p; y2 l* W// 感谢大大鱼的帮助
% `, M5 k; b! Z$ k7 T) }) l// Need Lib: imm32.lib
% V: \9 g0 b; k( I2 v: M! V% c) m8 V//
1 y# Q- D. V" D3 I" [# v* ~//////////////////////////////////////////////////////////////////////: y9 ^) B% R5 E; J1 U
' I& X. [% T' _5 d- `
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)* ^8 {0 x% E0 x4 P7 _
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_
) b l0 G. ~8 B6 T/ C
: P( r, V; I7 U' K: c M7 z5 z#if _MSC_VER > 1000" ]" z. ]: ^ W+ {
#pragma once9 I3 U: e& G' I6 X( |) I. k! r
#endif // _MSC_VER > 1000 w3 c4 A$ q. p3 ~* w
, L% j6 P9 Y' ?0 v3 F( c
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数4 p& `1 K' y% M, H
% M# H6 E0 p8 k' @& D#include "FindMe.h"
1 v j4 I A$ Y) U* J% M" Q+ B% Y6 v! f# C2 B% j' P
class CIM
# |. M8 g. \- d& ?; B' E/ b! {/ `{- U! J& H8 D$ B4 U3 `( j
private:
3 D K& [+ T1 I CTTFFont ttffont; //显示信息
" Y; S! \& H8 B+ b0 o4 f% a LPCANDIDATELIST m_lpCandList; //输入法候选文字列表 c+ L+ ` d& z9 g' I& j
LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针8 l$ N) i0 ~/ B. G4 `! o
LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针* n$ E0 b8 `5 G/ C6 j
char m_cCandidateList[255]; //候选文字列表缓冲区# Y' V. _1 n% y& J8 L3 N+ {1 L# L
char m_cInput[64]; //输入的字母
* }5 t v4 N' T& W, @3 ?' i
, X3 o/ |9 o/ Q, n) [ BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串
6 A4 L g6 }+ n* ]2 J; ?. p8 |& Q" h$ t4 S) F2 p& R
public:! O+ `. ]6 Z( y: a; H
" [! V2 D' ^1 {* k7 r" Y+ q CIM();
$ B6 {3 I/ G/ Q' W y) w" P virtual ~CIM();
) [* [) k; x& m$ E# L4 Z# Q6 Q0 x0 f: D
LPSTR GetResultString( void ); //取得输入的字符串( _9 e$ J% @5 c) X0 z2 s
4 k% n& B+ x8 n: Z' L1 m/ q: r! C void UpdateShow( ); //显示输入法信息
# U; u! y( s p1 Q2 W
G8 J! u$ e% }- _3 p# i! p- W: U& d LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述$ t' p2 Q) F5 S: D/ \
void ClearCandidateList( void ); //清除输入法文字候选列表* x% s2 u. j( g. s
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表
/ ?$ Z4 u6 Y8 b! ~* H" z+ f% L BOOL ImeIsOpen( void ); //输入法是否打开
; [6 c5 J! O @0 g void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息' S& [3 g* S1 _. v
void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
9 ?9 B0 o X( ^, ]) Z void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
9 r8 q, T9 W j};4 H2 a g* T7 g7 M4 }0 `+ T
& B/ V. }- B+ k' j9 q% c( q8 Q#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
7 N; d1 S4 a4 w$ E- J% O1 _; Z5 { s' V7 o: Z
: e/ {0 K5 ^7 a$ n* O
" Z5 Q- b, b( }0 Q% S1 x
//*********************************************************************************************//& N s7 J: i! J" Z! k' d/ N3 ], r
+ L) Z- @, Z8 H: T1 L
//////////////////////////////////////////////////////////////////////
9 ^ Z$ c0 _3 O//1 y" K0 o, \9 I1 E$ B$ J8 o+ G
// IM.cpp: CIM class (使用系统)输入法类
5 H$ t. \" R: {: R- a// 2001/4/30 Write by Jerry Wang
* I; |, _/ b& X1 J7 M// 感谢大大鱼的帮助% `; J! B; k+ d/ O0 w2 ~
// Need Lib: imm32.lib7 U3 y' }$ D s8 j" g0 s
//9 Z4 H/ i9 }6 w( N2 @
//////////////////////////////////////////////////////////////////////& d& Q* q5 Y! B- p+ ?1 K5 z
+ L8 e/ U% l D' O+ a! l* O
#include "imm.h"0 p2 S5 z& i2 l8 ?
7 W3 b. E, y7 U- [. j9 N& G//////////////////////////////////////////////////////////////////////
% Y! m. C6 D" X: @// Construction/Destruction6 s+ x$ j6 u- o4 x3 T
//////////////////////////////////////////////////////////////////////
+ @) W, C+ _' Z9 `1 C3 T1 h( k& C5 k# m3 B$ e$ W
CIM::CIM()
: {$ A/ Z) a$ P3 h" g* ?{) G. c( Q! t3 Z: s' ?
m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];0 Q9 G9 [9 J. P H/ F
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
6 ^$ P- g' O. e- p2 x *m_lpszImeInput = '\0';( J* M, [: f. h$ Y+ {. p2 {/ h8 ~- i0 Z
*m_cInput = '\0';3 j) P3 W$ t) \
7 w4 K% P* Y& a9 c/ `
ttffont.Create( "黑体",15,RGB(255,255,255) );% S1 {( y" N7 w- W. y3 f8 N
GetCurInputLanguageDesc();1 @+ P- w! g% \
}
' y2 I6 M$ Y1 K( C5 w, h0 C2 k
0 K$ T# b# r' uCIM::~CIM()! y) N) n- J! l+ f) R: G- c
{% ^ n% Y7 p5 j9 @' P
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
) M) i$ }. N# ?3 T: f& d" ]% H
( r+ t4 i4 V. _( b6 [! r CHKB( delete m_lpszImeInput ); 9 }9 A" s9 h/ P; \& M) l9 ~
if( m_lpszCurInputLanguageDesc != NULL )
9 L$ E2 k- g/ ~ CHKB( delete m_lpszCurInputLanguageDesc ); 5 I$ o, o5 F& z6 ^1 @3 q, D
}/ C, Q1 t9 [2 r% p% V% y; L
, P/ h# k0 L* i: P; C4 E" L& E* U
void CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
O" @+ {; N6 t; t% U7 \5 \{
1 L. m; v& w5 s# ? if (lParam & GCS_RESULTSTR)
. j+ L! g# u( Q5 h9 M+ |5 [ {
% j4 v, f$ U# k* J4 ~$ d HIMC hIMC; //输入设备上下文
2 p+ I9 R! n% h" H DWORD dwLen;# z. X. m; M( U; H/ ?4 Z, t, L/ x3 l( N
LPSTR lpResultStr;5 S( d9 c O, \7 t; M# M
( X. L! e3 T, d
hIMC = ImmGetContext(hWnd); //取得输入上下文( F+ {" r! o$ M9 c) D9 D
3 v, i$ t: F. b y* l* a B
if (!hIMC)7 w2 l# b# w3 p6 o
return;
8 n" o0 @$ G5 Y; S' F2 m4 `
. w, j6 m1 `- t$ X. a7 D7 n dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
/ U8 Z; E. z: _. _ dwLen+=1;, y) P2 _2 \9 e) r5 X9 q/ |0 W
, n: T/ Y, |$ x
if(dwLen)9 H. d: R" f E" K' W U
{
, D/ Y# v, N2 {3 O3 E lpResultStr = new char[ dwLen ];( z& k1 _8 y+ l1 j; P
o6 X; @* z0 T //// 缓冲区已经满了0 t0 z. ?1 h) [5 q0 k. y
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )# g) S4 |1 j& Q+ |9 d2 H& A" n
{
: G; _8 F- L7 d* q" Y7 Q* p2 W& ` MessageBeep( 0 );
0 T7 q7 k, @6 j. d1 a8 Q7 F3 P% n return;
( j) Z3 S5 L- ~) r5 | }
& c; ?. ^3 |7 r7 A6 X5 ? ZeroMemory( lpResultStr ,dwLen ); " v$ c: j. a6 I- c' ]
if (lpResultStr)) ^7 ^9 H0 a/ W& _% g/ a
{; V6 c( H* W' w' r( b, Q
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen); s- j% V4 k( b6 X2 R" n
strcat( m_lpszImeInput,lpResultStr );
. K7 D! Y7 l8 B- A6 r6 H$ N }
1 `7 A9 D# i2 R* P! ~ B delete lpResultStr;% r+ {8 y$ {2 c# }' B! n# ]; ]
}* k4 c" h9 [- [8 y8 Z2 w1 |- d
4 T4 _' v. n2 P ImmReleaseContext(hWnd,hIMC); //释放输入上下文$ n5 C. M7 Y7 a1 c: N5 j
}
7 m3 ]9 T, \. c
2 Q7 F1 {* a8 T5 P7 ^( B}
+ b1 a$ |, |) g# Z8 m1 t& |7 D' i
void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
& m3 {: t$ h8 q2 s$ r{
0 g4 r3 x2 c$ [7 c( G7 Z! r1 O+ l DWORD dwCommand = (DWORD) wParam;( r& s) {! F' U: Q
switch( dwCommand )8 @. n4 Z/ O6 P" O$ ]
{% Q* K1 _: u; l s& k) F5 h0 R6 n! N" K
case IMN_CHANGECANDIDATE:" v& g7 c, [! ?* l% h
GetCandidateList( hWnd );
* s# R) _6 j/ F0 n9 A. l6 u+ L break;
/ F8 h+ d8 M7 S0 G' U" C/ M" h* n5 m9 p* |( ]
case IMN_CLOSECANDIDATE:
% Y9 [7 g1 O1 ], E! N4 m ClearCandidateList();
3 _& ~ g$ {9 L7 d5 Q4 [ break;9 M8 i0 F) }6 a6 i
& b: m2 X* i5 F. ~: h7 N U! F4 q
case IMN_OPENCANDIDATE:* `5 c% e3 F8 ?4 _: _
GetCandidateList( hWnd );
2 @# v4 u5 N+ A/ Z break;. i" p# s5 C2 S, N6 J: W! l
}
5 i! e [; E6 p: ?3 e# P3 `3 Z}
; F5 a- b* W* U1 P2 r j" s$ O5 | a4 J9 A
void CIM::OnChar( TCHAR ch )- l$ V# X& N$ v" s/ p
{
3 G( \0 w- {/ c) H) d) L q7 ` int len = strlen( m_lpszImeInput );& {0 G4 O+ ^7 j+ A7 B! r
2 o6 U3 p3 L! F3 Z
if( ImeIsOpen() ) //输入法打开状态' q' ?7 l4 B$ R) E$ u. m
{
+ R( r- W8 z2 x; R: ]5 q) n- A6 {$ X w( P, r! L( d* ?
}
. @4 o: t8 P! T8 @7 j7 o. r* A- Z else //输入法关闭状态
q, C n, V7 D {- H4 i1 s# w. N
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母; f3 y3 y6 t* L: L) b3 G( l3 D
{
# i* D! h u/ V) R' D6 p' | *( m_lpszImeInput + len ) = ch;8 V% \( A" W; t0 C$ j4 t# Q
*( m_lpszImeInput + len + 1) = '\0';
9 b: E1 r) K& y8 s, q, L3 e }
. N( B+ X" E- z }! Q9 ~- T0 y& P9 |! S& y; _
- u0 ]7 i% R2 N if( ch == 8 ) //BackSpace字符% G: n# p/ j' h, `$ e, E7 R
{6 j V3 v5 U5 y' c2 u
if( len == 0 ) //字符串长度为零& E4 [. S3 n `1 }: n4 ~6 Z# {
return;
. [& ?' m- q$ V7 I! L3 X* J3 t. X$ S8 x$ T' a: D, M
if( len == 1 ) //只有一个字符
6 p+ s0 I! h l! f- b9 Y! M {3 j+ a5 o0 J" h9 S$ C$ n
*m_lpszImeInput = '\0';
- f" B( S9 s" U1 q return;: b# R& T, m! [5 I/ g
}
4 U8 H$ _3 A5 P# D8 x- D; d8 ?* F' v1 Z% |' x
BYTE cc1,cc2;) Y6 ?* c5 s; U$ Z% b* n6 g
cc1 = *(m_lpszImeInput + len -1); //分离字节
* V d+ q- l3 b3 v2 h7 ~ cc2 = *(m_lpszImeInput + len -2);
* z" c1 k3 t# _' O) M; H1 t
$ h: P5 U" A" p: G: g if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
4 F( H. g3 w; ?) U *( m_lpszImeInput + len -2 ) = '\0';: v, x7 j2 ]7 d3 B: b; j
else //是英文字符(单字节)
+ C# d; ^& e8 |* q: { *( m_lpszImeInput + len -1 ) = '\0';
; a' x! }+ }3 t' \ }7 w6 x/ X; s4 k. P
}. y6 `; ?/ ^7 J1 x1 l+ |( M
G- O; Q2 C& }6 C7 L% L% C
BOOL CIM::GetCandidateList(HWND hWnd)
1 T' l& o9 n; X# C K& o{
0 |& Z- Q, d d7 U3 w1 n2 Y: }+ Y DWORD dwSize;
9 M2 T: ?2 L& O8 A" L HIMC hIMC;
! E. d1 t6 s0 g/ }
0 h: O9 J+ ` k ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );4 z/ @$ E% P' x! S6 |% q/ H
) F9 d' Q' F+ S
if( m_lpCandList )9 ?2 `7 I, v+ A; b/ B" `* y" N+ t
{% x* v+ A0 a5 g9 T
delete m_lpCandList;6 m( ~; v0 O! u4 B9 U3 \8 ?8 K6 t+ p
m_lpCandList = NULL;
" @/ W1 ~- v, y K* X }% T. @# m% ?# `) @$ I( k" s
0 o/ i" ^/ F2 z" j$ |* ~
if( GetKeyboardLayout(0)==0 )4 S I6 l# V& v! s
{4 ?7 L4 T: g! s0 K. S6 m }
return FALSE;
* r: ]+ W! ~, ?0 u i8 i: v }) y& ]9 R% e* K
; y1 l& v# c2 S, J/ x; t6 w hIMC = ImmGetContext(hWnd); //取得输入上下文
' B i* u- P& r0 S$ d7 o if(hIMC == NULL)8 E+ r/ l# _5 W+ F+ C
{
0 o, B( R6 _' l+ @- l" W1 _ return FALSE;
) O: c5 l# P6 g }" ]7 C8 H7 {" q, v! V) j w
: W9 a0 b; ?- q0 n/ S( P2 q
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
/ F4 D( e4 S( M( K3 y7 E if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0))
7 Z- n o8 M: C3 ~3 ^) I {+ v8 p- |7 D, D7 F- q3 w- f
m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
# [, B* |& E: a. d if(m_lpCandList)
5 Y# j2 {2 F' ?) K+ f2 U$ Y {
/ d. g A# P+ i" T9 V2 N ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);2 p$ O. e+ ~; }9 t3 |" Q- @
CandidateToString(m_lpCandList);
/ N/ M: \: h8 X/ b }
) x: M; k8 U# V+ i" z }
" z* c4 }% Y# N" D1 j9 l8 W0 W; r" \& L( d
ImmReleaseContext(hWnd,hIMC);% }: K2 O) j3 B) m6 A
% }/ C, B# |+ X7 B. s
return TRUE;. T$ M. g, r& W% ^
}4 c) O9 w e9 v9 z& u4 S& I5 A
$ w% T0 t/ z3 ~
void CIM::ClearCandidateList()
# ~! u- {7 q, T- w2 O' D{
5 X5 s+ t" p4 m; d9 N. y0 | Z if(m_lpCandList)% x1 f3 W' f# t6 Q! o: X
{
/ b' O) E7 C+ Y0 v delete m_lpCandList;$ A) O' ?- `. v7 L$ m' A
m_lpCandList = NULL;" J! }. S. i3 X0 c/ w
}" a# t: b- k4 n
ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );8 Z# G n. c! X1 o% b; u+ v
}
" y; ~( Q7 v: R) O) l/ V) ^' G) M9 o; ? @$ K3 c) H5 O
6 k5 g) ~2 R1 Z, v' w2 t6 uLPSTR CIM::GetCurInputLanguageDesc()7 s$ s, O3 V3 s& E/ ^
{
# a: U8 W% Q: w HKL hKL = GetKeyboardLayout(0);
6 i; q q: E3 J- T/ ]" e: \; h- j0 g! `) B
if( m_lpszCurInputLanguageDesc != NULL ): F( u/ E( a5 g) S
CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^
. V& j8 \& X$ ~* S/ Q1 [4 G: r( a: @
int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度7 C% B0 n9 K* R- ~$ |
6 |# ^- d; @7 `- S
CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
: _: z+ A* U) W6 Y! Z) S Z. R, e( z& ?' q
if( lengh )
7 S* ?& `1 D4 I; L. t5 g4 o {
8 F; X6 C+ ^* |; q' a d ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
! o/ S2 ?, ?2 U }# m2 x. w$ ]$ E' `8 J' `
else
; r) k8 n' p3 f) Z. w1 J {$ z5 }8 D. C, m. N
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );2 k* A; j; v# e! Y1 G K. \
}. e; C& _7 a7 x
8 H( Y6 M$ C h5 | ^ return m_lpszCurInputLanguageDesc;' x, w; l9 U$ r
}
) c, s0 E7 ?% K. |. W' q6 Z
6 J6 @+ c2 ]) a3 N" m* ^void CIM::UpdateShow()* Q) _# Y# n/ b8 @* F+ ^. E' s- a
{
! R0 K: ~0 M1 U POINT pt;% E# r3 ^% O$ Q1 W
pt.y = 450;
5 I4 s; J" y# D# W0 o5 C1 _% ]; F pt.x = 400;
3 y' p! f" v) \* U& d3 J% E- a ttffont.SetSurface( DD_GetBackScreen() );
+ k2 \" H K: F7 _3 g6 K0 | ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述
- m: y4 a7 P* c
1 s4 ?/ t& S, _/ y2 \2 k pt.y = 420;
- f% }2 V' X/ m& a; s4 x& `2 M pt.x = 20;5 z8 F, m- s; U& @3 |/ t* z1 Z
ttffont.ShowText( m_cCandidateList,&pt );
- ?8 Q6 _2 U4 @5 D3 B+ i( E0 Q* m5 x: i. T" O& W, k1 S
pt.y = 450;
. S, H/ H3 ^2 H3 ^. _& L pt.x = 20;/ I. D' {! |* g) R6 B \% _) ?
if( *m_lpszImeInput == '\0' )
8 e& q8 t1 [ J* y return;
* \* p o. ]$ B' M8 g2 N6 }4 y* g4 S) q( O( G
ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字3 H% u0 m. |3 [5 e5 s$ J# w
}
7 ]2 F" Z& e S8 B# R
2 E2 i% a" I! N' a9 d* NLPSTR CIM::GetResultString()
1 r$ n3 B, ]# \+ o5 c+ T1 m( W{' o8 ]7 G7 k4 h* y' [" f( c0 d5 w
return m_lpszImeInput;7 i6 C: B: n) a/ }! t
}5 G3 s# I& b' n& s* Q, M
6 J/ W& ?8 p1 L, k
BOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)3 ?% j. H+ j6 t, e; A' k
{- l0 y( ?3 _9 Q
if( !m_lpCandList )
$ ?, c, N) j. h H1 z return FALSE;
2 r, J7 n! W. v& i7 `7 m0 \8 d% n7 T5 B" q0 p$ m0 {& p; ~
if( m_lpCandList->dwCount>0 )4 y n! ^$ }- R/ K, i
{
! G4 T1 z( `- k! x1 j LPDWORD lpdwOffset;
G, S; p, V. N. o: K4 x/ d4 C# c& z1 C/ e( q; ?7 B
lpdwOffset = &m_lpCandList->dwOffset[0];
% {) R' H* q; s% y; e8 \0 G$ h' S2 y/ W( I! Y) X" d6 ^* C) ?) U& p
lpdwOffset += m_lpCandList->dwPageStart;
6 H8 I+ a, n7 A" ^4 \. i4 C) j9 V
6 m, m" B# D5 m8 ^7 C ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );1 M; B3 i! \& C
8 Z4 c# C$ P! c* e/ D: _/ L- d; O
DWORD z=1; K! o' M5 s& C7 R5 s
for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++)
: x7 a3 F. p" K; K. p0 o { 0 W: h7 E, N. @9 w3 N& L% M' S
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;
! t( j& A, V( X! B char buf[255];$ G4 f/ {* U [# K
sprintf( buf,"%d.%s",z,lpstr );
' F, T9 D! d3 i5 b2 H/ n6 V strcat( m_cCandidateList,buf );
! l& I0 ^3 w, Y z++;
/ Z2 z$ t" _+ t& H7 q+ C+ K3 @5 x }
4 `# V1 Y6 M) n# S/ S+ O& F* W# m% p" l2 x& G. K1 e$ W
return TRUE;8 Q5 E* k. z# t% C! V, }
}
- h- u# w* ^3 l. U3 B# e, A, ]
& T* q+ e% `: I9 c F- G return FALSE;
: u7 `- [5 {# P: v" L$ p, ~}4 R7 U d) s/ g' q" B. `, v; u
7 H8 U2 g' K* uBOOL CIM::ImeIsOpen()
# J% a1 i$ x/ F, W& }{
6 U; @8 ~5 |; r4 L return ImmIsIME( GetKeyboardLayout(0) );% d% \; h8 u9 f" s
} |
|