|
|
//******************************************************************//
% N; G8 t" B% O; ~9 K+ `//# I0 w. @5 t3 J% R
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家+ q( r. M z/ Q! c* F$ a9 R& Y
// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-). P0 Q! c9 c2 B
// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
% B) O8 r+ E2 E( R// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT
# |2 S6 j+ A4 S5 g7 B1 z8 V# P2 F// 为显示信息用,可以用其他方法替换如 TxtOut() 等
i- G& t, o1 U( S0 I//1 [* I2 Z/ @% v* U
//******************************************************************//
6 L1 X! i- s' e! w
) q2 A6 r2 Z" N& q//////////////////////////////////////////////////////////////////////1 o: T. x7 ^2 M% ?/ ?
//* P* @- d ~3 W+ e0 J+ \2 O/ y: `; a
// IM.h: CIM class (使用系统)输入法类3 x; v) b$ v7 Z5 l; Z4 q
// 2001/4/30 Write by Jerry Wang5 E* x& {) f8 ?: d
// 感谢大大鱼的帮助
0 B& j0 ` b8 N1 L8 X// Need Lib: imm32.lib) b# G4 K- [1 C# d7 ^
//
1 o: R9 P3 F" @# W//////////////////////////////////////////////////////////////////////% _ _* t2 q; m1 W: M! h9 F
3 O* e" ^7 a. i#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
4 @' F& \. p" _$ Q' W# h6 s: t/ x3 p#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_. I C1 X; f- m, _8 o5 J( b
% m/ z6 S7 V7 [; b6 w A: r3 o#if _MSC_VER > 1000& k* r1 b" X+ ]: B* }5 x) t" }
#pragma once, N' e: s4 ^3 A/ E3 @
#endif // _MSC_VER > 1000
# [( q0 A# D* k' Y- W: e, F0 r; G5 `4 b1 |0 H" D
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数
% u8 W0 U* V6 ?1 B5 z O" a8 T; x* [, Q9 v" u+ _7 e
#include "FindMe.h". j s9 T" C. ^- p
: v! U4 @. k( f( Pclass CIM
- ~- `% ?& \0 I) G{
4 w5 q0 G8 A# D! _private:
, q6 c! E+ e- Y/ L4 G: b/ ] CTTFFont ttffont; //显示信息2 U& [) _$ X( I( w# c
LPCANDIDATELIST m_lpCandList; //输入法候选文字列表: l a9 ?% ~6 |+ ^
LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针
0 ?) G6 a% L7 \ g: p# r6 \- c. @ LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针* j# O; g: ]6 r4 l0 l* @5 o2 {0 Y
char m_cCandidateList[255]; //候选文字列表缓冲区
' h: v7 b- u/ f& b6 t4 N& @ char m_cInput[64]; //输入的字母
0 u4 ?3 S" S5 g7 n2 ^- n6 T5 @8 u* C- n3 g1 Y
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串; S. y+ c9 U% _7 j7 x
/ }. k) g" @& [public:
2 x, F) v9 t4 f1 n) P* b3 D, P8 J; _% |, E s$ C5 t
CIM();
% F# E) Y' }0 i virtual ~CIM();
8 Z3 @% Z" o/ J2 ^. [
2 [& ^) c- \2 h# d; d0 I LPSTR GetResultString( void ); //取得输入的字符串
% s5 h% |3 f, @9 S# ]' o' E" D F0 z" F9 a
void UpdateShow( ); //显示输入法信息6 d# a/ i5 h- s3 ~( j
% ]6 Y, @6 P" ]1 \
LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述, a/ ~+ C# k) ]
void ClearCandidateList( void ); //清除输入法文字候选列表
( S5 z: B' a4 _( C* _ BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表$ r/ N) O; g, d4 [3 @8 }$ w( {% H
BOOL ImeIsOpen( void ); //输入法是否打开
6 S0 z! e% C; v1 E( h& w void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
( e2 p+ w1 F) [8 B) [ void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
1 e) V& [8 ~! ]; X- Y3 I8 K void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息- z7 ^5 P7 w; u$ q2 y4 E4 U5 ?
};5 k& A5 X: U; v. G2 G$ q" V6 b
, v7 R. `) N, P6 d% S, ?#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)- I' ^8 o j( L7 x
% Q2 X% p; @( [) f- M7 u; C5 ?. D' d. j( ?- q1 b& V: v
5 V! C; ]% O7 d" O A8 `
//*********************************************************************************************//8 ]3 I9 n" p8 Z' U/ j7 _+ f, {
2 r4 ~) Q6 |5 z//////////////////////////////////////////////////////////////////////
; g; Y6 U0 k2 b. j* G, e3 e//
, X, b8 C3 }* K4 D: e// IM.cpp: CIM class (使用系统)输入法类
3 d5 t) Q& Y' a0 Y( }/ P. v$ u// 2001/4/30 Write by Jerry Wang
8 D9 j, [9 A0 y8 Z1 _// 感谢大大鱼的帮助
3 C( p7 f U9 J* X! H$ l k5 M// Need Lib: imm32.lib
2 d3 x6 R2 o! w. m* u t( S+ E//
; J& E& w/ c8 t; U4 T//////////////////////////////////////////////////////////////////////% V t2 C& o" L4 b/ ^0 g4 h
3 r; J5 ?5 n, `. H#include "imm.h"
# d; Q2 [0 V3 P! U9 H# U# a
# F7 h7 k, R, B% _$ s- p6 m//////////////////////////////////////////////////////////////////////) O' S' t6 V! v F2 T' ]$ v
// Construction/Destruction4 | I9 K6 B3 k- X# ~/ l
////////////////////////////////////////////////////////////////////// X5 V' b2 p/ T \7 W& `
+ `# r0 K) y! u& dCIM::CIM(). y1 u- `. P% C0 J' O# c
{9 U9 R0 Q1 l0 i
m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
6 L3 E% d* `: ?2 `# p$ q" D ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
$ U' ~1 S8 `+ i. o; Q' g *m_lpszImeInput = '\0';' ]" n, o! Y+ y& B8 P
*m_cInput = '\0';
/ ^8 \) f$ L6 c7 g8 b1 M$ O C3 ~# `) d! |" Z# U) y; I5 h
ttffont.Create( "黑体",15,RGB(255,255,255) );
( t Y, T& k6 s GetCurInputLanguageDesc();
. l5 r: @4 E% p}
/ ], i7 `" ? Y3 {0 h/ _$ m" m1 g1 n. [+ ^( M+ `* f
CIM::~CIM(); R$ N" r$ Z# }9 Y% t) Y
{; @" P& u- F, {) f( B0 e% m
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER ); j, [1 i1 M5 q0 I2 g/ [ d
+ K& U; H7 E3 X- F8 E9 t! g
CHKB( delete m_lpszImeInput ); $ K2 m i+ j2 h; C* @/ _* O
if( m_lpszCurInputLanguageDesc != NULL )
" k: x4 |5 ?3 U: | CHKB( delete m_lpszCurInputLanguageDesc );
8 R2 i$ o3 `: y4 ]/ V9 h}
1 l6 W0 `" g& X# `% _
# F2 p' m9 M# o- s- hvoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
2 D) H. V; z* V6 [' i2 ^ L{
/ {- y9 k1 {- P0 I if (lParam & GCS_RESULTSTR)7 A. q; M! c; R4 |' L; T
{
" v) Q) p" Y. x& u7 s% q HIMC hIMC; //输入设备上下文
* g% ?2 B& {, K4 X" x7 ` DWORD dwLen;
3 S1 I! U# W2 [6 B* K4 J, m- Y+ B LPSTR lpResultStr;' _( ]5 n1 e1 {+ A4 e& A r" {. ?
# y* A3 L1 u* m0 B hIMC = ImmGetContext(hWnd); //取得输入上下文7 ]9 ~' X) i; b7 }
6 s# x' Y5 G' G, m
if (!hIMC)4 w9 X6 N! |( K
return;
$ F# x( J) H0 }/ T1 a7 x- K7 W" z2 G+ j; E2 R8 g
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);, r1 M" ], {( u6 u. Q) V) e
dwLen+=1;
3 l+ M* v7 U4 R) W
" X2 l4 z4 H4 n% e/ p8 N/ w if(dwLen)& b8 V$ `; J: E: s( l1 I9 A/ l
{5 k, J9 |9 G6 F& m8 s
lpResultStr = new char[ dwLen ];# @6 A7 c# S$ S! L M( D
$ y* C5 F' R3 N/ v //// 缓冲区已经满了
( A& d& D9 k {; \' [ v- b if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )) i d( j1 F3 Q7 K2 j
{
3 V3 F: T1 I! ~& Y MessageBeep( 0 );% W; k! P2 u6 m* F: J2 w
return;. M' L6 J+ x7 q& e& i, V
}4 c9 w, t' h5 K2 i% Q: O/ p
ZeroMemory( lpResultStr ,dwLen );
% J6 C- p0 B7 o0 P if (lpResultStr)
( W9 \3 N4 R! H+ R T ^ {
* s8 ]1 C& d" U: U" |9 ?. h5 b ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);1 |! m! ~: N2 J4 k2 c
strcat( m_lpszImeInput,lpResultStr );" U0 B, b) d, v8 d7 w/ G
}
: m5 e5 ?& q6 Y4 ]( C/ J H6 x delete lpResultStr;& e( E; V$ {7 G+ z; r# C
}2 [- W% K* H% b N
# y! M" L) @4 q" Y, H ImmReleaseContext(hWnd,hIMC); //释放输入上下文- a4 u8 C) Y' D4 c) E8 V
}! [- v+ X; E2 S+ P3 }
5 N! h" c0 f, z$ V2 _& K# a' C}
* K" w% C9 \2 \% |4 J" e! H9 P2 D
, z- m3 a, P5 ]. e% J' S; w" ]* jvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam)) G/ }/ R# x U2 a
{
$ V/ E/ k% @$ S5 K$ w) o! S DWORD dwCommand = (DWORD) wParam;3 ?( ^$ g: I A6 Z2 o- c
switch( dwCommand )0 j- r0 z) ^+ F. b
{, y1 b% B; w0 Q' p/ M; Y( a
case IMN_CHANGECANDIDATE:
2 G& z9 w# R" | GetCandidateList( hWnd );
" p8 s# a6 B9 Z+ R' u break;
: g7 k M A% K, q% ^' X3 ^5 I& T7 x; ~. ]* _2 V
case IMN_CLOSECANDIDATE:
- b x' ~0 {5 b$ ? ClearCandidateList();
# ~/ ?6 p/ B+ u6 t- |' |" j5 g break; l1 S/ |" b& V( U
/ D+ W+ G0 d O( }
case IMN_OPENCANDIDATE:
1 s5 t9 t1 s* M8 D0 C GetCandidateList( hWnd );
: n" h. J! e \# N break; q% S+ U$ y' u3 r6 N( k1 q" C! l
}
2 b. t8 X& }" Y6 U}# P# q! n/ x. R: Z
; Z% f6 a3 F a* R1 q0 p8 s2 F
void CIM::OnChar( TCHAR ch )
6 A& B. F6 P; {! ]1 f* V$ z2 W8 Q{
6 e+ r/ U& l- y; ~6 f% q3 ? int len = strlen( m_lpszImeInput );
* t4 {( S3 H6 V+ P8 V3 u5 ~; w1 b, |# H, c& x0 l5 R
if( ImeIsOpen() ) //输入法打开状态
% a9 @, n0 J( M! Y" Y {; Q9 @* C7 `- i- S/ R( n) R
+ V$ e& A: I7 Q" k. P" _ }
- J) Y/ R( P* ^; \ else //输入法关闭状态
8 P8 T3 d& q' C* o/ Z: g {
8 Z( C( }3 B5 E; I0 q2 {8 p- G5 A if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母# b2 q6 }7 c: \% H4 J. [
{
' p! n5 R K% z7 h$ M5 u3 ^ *( m_lpszImeInput + len ) = ch;
# b$ h/ l. r$ k! h4 t *( m_lpszImeInput + len + 1) = '\0';" S" r) Q8 a1 I0 W7 v
}
7 e# Y- Q6 G, K8 y }
1 L0 R/ F& E; s! {) g. D) G2 B4 x5 M# @
if( ch == 8 ) //BackSpace字符
. I$ h" G' c; k {4 E. }, \- I8 {/ ]9 y
if( len == 0 ) //字符串长度为零
6 {9 _2 y$ d* n return;
1 n+ |' _& I9 s' ]! r
1 U# q, R- I8 x$ r" B& e7 F5 E if( len == 1 ) //只有一个字符
. x3 @; v, z- S, \2 J) _0 K {& r0 q y; x. u0 ?6 K- H, W9 \
*m_lpszImeInput = '\0';9 q1 e' k# p4 J: n
return;6 _! \" {: f$ i) T# s k3 F+ t
}
( D$ y* H( x! N9 Z4 |2 Q4 W; d" g! U0 J& @" b
BYTE cc1,cc2;
' W$ V9 K/ |( I, `) h: P cc1 = *(m_lpszImeInput + len -1); //分离字节* d' ~# w, x+ _4 c% Y8 p
cc2 = *(m_lpszImeInput + len -2);3 @0 `! n& ~7 e, ], v( |- `
4 `0 ^8 e, a0 \' d ~% Y. V' L if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0, b& X& u" | T$ P* l
*( m_lpszImeInput + len -2 ) = '\0';
* ], D/ O/ g2 F) U& E7 {2 n* i- O* m0 j else //是英文字符(单字节)
0 p% w# V1 D& ^* L8 H" J *( m_lpszImeInput + len -1 ) = '\0'; T; Z0 X' k+ a4 e2 _( Z H
}
$ |3 O6 f* j/ t! C}" b3 F8 R D; \* Z; ?0 E* |
& P0 m" E) L% T( d6 M: D
BOOL CIM::GetCandidateList(HWND hWnd)
( l3 n- i8 P& V) T* s" @{3 Q. M. ?1 B% V8 l. [7 I& M7 z% M' J
DWORD dwSize; 7 U6 w, f, O' W/ C
HIMC hIMC; d2 R/ ?" U( f3 z
! R. ~( p9 _/ n3 G: p1 V
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
+ K) l+ q9 ?# E+ g% c! a
5 ?8 H' ^1 I1 W. ]- J8 _) T if( m_lpCandList )4 [8 t7 \, @3 M9 @3 |
{
6 j8 ?. |/ U: f4 b7 e& |5 h delete m_lpCandList;
# E6 Q% m' b0 h, l) _/ L m_lpCandList = NULL;
- s" e) r9 t( u" u5 h }
5 T: y9 Y) `& [$ l. ]; G. |, i3 n2 g4 ^
if( GetKeyboardLayout(0)==0 )
$ S) u! p( X7 G3 W/ G { ~3 O5 ], H( D$ c- I3 {( `% `6 \
return FALSE;
% V1 y+ e. q# G8 f7 i8 E }
9 Y( i8 Z* y5 ]7 |, A2 {
1 g% ^/ g5 _& m: h hIMC = ImmGetContext(hWnd); //取得输入上下文
9 f. h( L- [( d if(hIMC == NULL)9 C5 _9 t! l6 Y; t$ W9 U! h
{
- T1 K* D5 v8 ]& A return FALSE; c' p; |0 G2 I. s
}( S+ z7 J6 F- T
) D5 U+ G/ A# T- |6 M ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );! v6 W: X0 Z# s2 \/ E
if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) : a+ q! q( h" {; _
{9 n9 x% N6 S; a/ O* ]- Y1 \
m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
+ N: t6 t4 n5 k6 j9 G+ y if(m_lpCandList)
/ ^ ~( ?8 g* F6 q! f4 K- u {
2 V& u s* Z* L ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
) @& ` k1 Z& B- T( b CandidateToString(m_lpCandList);8 D2 P8 Y. S; U
}
2 D: B4 Q$ e3 r( Z* f. T: A } 0 _/ c% K. {: n( q
( b. g( A! n" U! ~. s7 }3 N ImmReleaseContext(hWnd,hIMC);6 i2 @6 Y$ x# ^- V' T
, ]) Q9 f `+ A! ]! B; q# N return TRUE;
+ D+ r% i% X& \, G( E) [}
6 S5 x* ~3 y' N
S' _, q: Q6 mvoid CIM::ClearCandidateList()0 u! i- N2 J& N+ i4 P
{
# i' P; x) J/ h8 a* t0 b, f8 D1 N if(m_lpCandList)
/ O$ k0 m4 [7 \! Q5 U {, S) H& |1 d- C% T9 w7 R C" x0 B
delete m_lpCandList;" Z, m! w/ V# S
m_lpCandList = NULL;
( n7 l1 }5 w# D7 I }7 i$ H9 [3 F) S. c0 o- B% \
ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );6 }, [, E* K# ?' p7 t
}, j. W" [. ^! O) L3 |+ ?# w; R1 p! w, \
- o8 L! b; N& h
9 u+ Z+ ?4 E! H( | x( FLPSTR CIM::GetCurInputLanguageDesc()
& J; m3 k5 |+ K4 Y0 X{
0 J0 k9 c# v$ _3 M2 a5 I HKL hKL = GetKeyboardLayout(0);
5 h; F' A) }$ W9 d5 E- M4 w3 H m$ Z# d* ~
if( m_lpszCurInputLanguageDesc != NULL )' f* a5 Y6 u! ]: `( `2 ]
CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^9 W4 w+ m! x) Y3 O I$ D
1 t4 O) `. C6 I
int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度- H! N9 e0 b! A$ R2 T0 H" N
$ _' c( R; I) e5 F# J ^ CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );& q k! X' J4 R0 R- P$ m, r( N
( X- S, D( a0 K if( lengh )
9 B* g) E$ X( ]% c {: S. y$ x% M4 _4 w
ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);( g1 q/ U, f4 x/ C z2 O5 c
}
" Y* y; U1 j' m" Z# c else4 F9 Y t% H" `- k0 g# o
{. y `; p5 Q( A: e) r% s) L
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );- q: b8 l% [7 e( f
}9 n. u) \1 a( e( E- i" C
/ v; o4 W! y+ R @2 R) B5 P | return m_lpszCurInputLanguageDesc;! j' I9 Q( C W
}. _1 c9 K1 J2 {2 H5 O* z( I% d* \+ I
1 ]3 |+ d( g2 _3 |
void CIM::UpdateShow()
1 ?9 t& \/ R" u) A+ b$ O{
- H, f. {. Z) t N9 ` POINT pt;2 L( N( g7 l( P+ E! w7 p$ ^# u
pt.y = 450;" K* `4 ?# K% x, ^! K( g
pt.x = 400; $ V. F* W1 h7 e! Q9 O( d8 M
ttffont.SetSurface( DD_GetBackScreen() );
* u f5 N+ [, p( Q+ h: O+ d+ Z' M ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述6 I0 A1 V9 o5 Q- c% \
, h) l( j, D, x& f! D( c pt.y = 420;; Y9 _9 `3 p9 {. C% a
pt.x = 20;
1 ^9 r9 s Y4 L ttffont.ShowText( m_cCandidateList,&pt ); L1 }5 a: L( r# m k/ P+ X. X# o
$ Z% j% d# k+ V# z |" a/ W
pt.y = 450;
( B% v) @' E; t) H pt.x = 20;4 U% J( F/ S4 a S0 ^9 i
if( *m_lpszImeInput == '\0' )
! N9 Q6 i2 P: f8 T, M7 g return;; w( w- c& K% @! g) E
; n r: y) D' s1 @7 ?& t0 v z ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字7 s! Y0 a8 `, o
}* K7 Z8 J& H# j- {, ^
% k* T% O6 H# ]- a' Y7 g
LPSTR CIM::GetResultString()
4 |' M8 S1 {5 i/ F) ~$ Z% u6 j{
/ v1 R1 d7 V, U. O8 i return m_lpszImeInput;
/ b( A) R! ^( }7 N}/ ?) {9 f+ V! S9 n+ \5 L
: j( ^4 ]8 t$ N6 @1 Z( cBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)
# o }9 o( \8 z( y{( J p: ?% U9 J2 B2 ]& A2 W) d
if( !m_lpCandList )8 R8 W) L" h$ D4 e' R0 C- U0 L7 i
return FALSE;8 q9 ]% L. x- e' L( g
( a: b! o% N& W6 R$ i8 g0 t* [
if( m_lpCandList->dwCount>0 )
- n/ U0 ?% ^! e( q: k {
8 A( [ S' E. ?+ b* e0 y6 m LPDWORD lpdwOffset;
( E8 f3 q) r2 {& Y" ?: A0 i
0 Z9 y& D, V; K lpdwOffset = &m_lpCandList->dwOffset[0];
( s( K8 X0 E7 ]4 j2 O. S A
7 T9 E, a" [" ^: z. |5 G; C lpdwOffset += m_lpCandList->dwPageStart;
f; C0 f0 a# G
% G1 |1 d( x8 w0 g ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );
& ?# Z) D) X/ @3 a0 B3 |. k3 @2 B# T" U1 C6 C
DWORD z=1;
9 E: t4 v9 g3 o# l for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) , T$ _1 P8 w6 E( Z+ m. v& C
{ 3 j$ j* V# D0 K. E, o
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;" a: o0 |2 J3 ^1 \
char buf[255];3 F2 G5 ?% E4 f: \
sprintf( buf,"%d.%s",z,lpstr );+ X4 a% u% z: h* J- ]* ^/ b
strcat( m_cCandidateList,buf );
* w+ J' g+ u! U. v z++;
' E, y, x% K- z; X$ c" X4 X" r' o }- K9 j! _$ }' l) X; p" \$ b
9 f0 h7 h9 D" u2 K* G7 ?
return TRUE;: P8 [2 y0 v' S: g' C
}
$ c5 O% y: T9 {0 K; @3 E, F3 B/ g
2 `1 b( P# Z# |! E+ k& ^ return FALSE;7 A# F- {" M9 C/ Y9 X$ l/ C
}
/ o, R4 x& Q# F8 \' h/ V9 h1 K/ _( E- s$ q# \; |: U" |) n
BOOL CIM::ImeIsOpen()+ R) l& @4 L5 u4 k- M
{
( [4 s7 I. p! N K return ImmIsIME( GetKeyboardLayout(0) );) e* \& _) P* q# _ e
} |
|