|
|
//******************************************************************/// W$ T. n" K! _8 v3 k& s
//: W5 e$ p8 L+ Y" ] G$ y9 i5 N
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
# W }+ D: z9 f& K; d9 y+ p) U// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
! `3 {: j0 H; L: w8 y// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
# t0 [1 n. G5 u0 C5 k9 M0 A// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT
9 q( Y5 Z2 a; P; o8 X$ |$ U& C// 为显示信息用,可以用其他方法替换如 TxtOut() 等; d; g; ?2 P6 L$ q# Q
//7 r# ]8 {+ Q4 ~; a" R1 R0 C8 X
//******************************************************************//
/ T6 \4 m$ M0 R7 X# R1 c/ Y2 H6 M/ w* m" }1 @3 m
//////////////////////////////////////////////////////////////////////5 O. [' H5 f9 k3 U
//
. n" g5 a2 o- Q3 N6 i& D1 o// IM.h: CIM class (使用系统)输入法类
, I# H2 S0 ]" {& i+ H& N# ~// 2001/4/30 Write by Jerry Wang
8 @3 @" A, ]! |( A0 }// 感谢大大鱼的帮助
& W* B% j0 H8 c3 h// Need Lib: imm32.lib3 {% M3 Y* O( u. f
//2 D6 p% I6 o0 U* f( x- C
//////////////////////////////////////////////////////////////////////" X9 C% a8 e1 L& s6 d D
# A% S+ c) z7 V9 @6 H
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)# `0 G" {+ d3 a1 [6 i, {- h2 f/ b3 D
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_
# M- o9 E. t% O0 V! V. J1 b
# N. N0 ]) b+ e7 Z# ?#if _MSC_VER > 1000
7 o4 o! ^6 F/ w8 n#pragma once9 l7 U* a6 H6 Z5 |, g8 k( u
#endif // _MSC_VER > 1000
( c3 F0 N5 n: {3 |' }/ D* {& g; I/ e$ O; [' U: p# }4 v8 X
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数
3 n7 x, N' m. O' [: ~' { K4 {8 |- R; E# K6 W" j; m* `3 [
#include "FindMe.h"
0 N! b& q' ]" {" }+ l* c" b: m7 W5 \
class CIM
2 _/ F* V# b& h% l1 V% ~; G5 V3 y3 r& q! J{
0 ~1 m, n" \; O( A* f. x+ Vprivate:
0 ]6 h* a1 Z' } i* B$ t# P1 b; P CTTFFont ttffont; //显示信息
9 a# U( Z0 C V7 ] LPCANDIDATELIST m_lpCandList; //输入法候选文字列表
7 U. z7 [% o2 U, }. n* z, @ LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针5 G/ K* s4 F/ @; L, s
LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针' M$ D0 x+ c# x+ X( q( @
char m_cCandidateList[255]; //候选文字列表缓冲区! l6 b( r/ V# O8 s- f5 k
char m_cInput[64]; //输入的字母
6 _2 I/ E# D$ Q+ f9 l9 o1 ?7 Q0 p4 I9 Q8 I3 y
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串
5 J1 R9 c4 Z- O; I1 J/ s0 t
' K, u* o7 S0 r7 o5 h5 R" Opublic:
" b% n5 S5 P4 d$ I" [, P+ j$ j" G/ O
CIM();
% e: D2 z8 `! L' e virtual ~CIM();
- L) P9 x; A' B. B* ?% g% P: |! K. i; }; Z0 u0 r; C
LPSTR GetResultString( void ); //取得输入的字符串
0 ^' r/ B, b0 i6 n6 f
$ ?+ ^) r, V0 p7 s9 c8 G% B2 z0 _9 ~ void UpdateShow( ); //显示输入法信息
. ?# c/ o0 q% }5 C9 j0 S) a) s. e! S5 A) k- w
LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述
% J! ~- K2 ?" w void ClearCandidateList( void ); //清除输入法文字候选列表% x5 R0 v% k) s" F P& ]
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表/ j L( Y9 P R2 V _+ L
BOOL ImeIsOpen( void ); //输入法是否打开
1 \9 Y- n: n6 P9 t4 F void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息+ E* F u* H( C: {3 w- Z
void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息 t g& t6 g- ^; I1 Z7 K
void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
9 n: ?% W: X( R- G. E};- Z& b7 v' w5 T5 P
! M5 _; g1 E; l' q7 r. T
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)) Y" u0 W$ S* t3 K1 p
! t: @0 Q: o6 K- I/ J1 V3 M0 v2 I2 ?* p& D$ k) M; O7 }
. w9 O! U' f% G9 v$ I4 t4 [//*********************************************************************************************//
( l2 g2 [8 _" q1 p
# n' Q: D- g, b( W3 Z//////////////////////////////////////////////////////////////////////" X4 d7 ?: W4 I+ P5 G( S7 {
//0 P- S6 }0 F- s5 N
// IM.cpp: CIM class (使用系统)输入法类+ w. L& S5 Q9 J! z2 v' F
// 2001/4/30 Write by Jerry Wang
: F9 U2 \( T. N. y// 感谢大大鱼的帮助
" e5 N t8 v+ R( P// Need Lib: imm32.lib$ }1 G5 W" p; \
//+ @, X4 w% _ z) ?7 b) j
//////////////////////////////////////////////////////////////////////, B2 S7 M' @$ r) |; j' s T
+ \' D; z5 g! o1 k% ]- g* Z#include "imm.h"; }5 Q) S1 X L' s
, k/ Z, e9 @( z1 }6 B
//////////////////////////////////////////////////////////////////////8 f7 }! _0 C! m2 ^ |
// Construction/Destruction
4 V: e& U3 j, |* {, x) @( E//////////////////////////////////////////////////////////////////////
4 n$ c5 P/ G/ a2 Q. J4 z# }9 b# r; {2 z7 ^2 q- k
CIM::CIM()
, N( y; w. A1 a* W{. B1 l! P0 I) x
m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
* m7 W' u. ]# o# z ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
+ V- c$ d! ^/ a *m_lpszImeInput = '\0';
- C" }8 x( T9 g' o' Z *m_cInput = '\0';
- n. Z2 r: t/ ?2 J5 k1 @$ f" a5 N
ttffont.Create( "黑体",15,RGB(255,255,255) );
: U B6 z, o9 M& O/ j9 _' @ GetCurInputLanguageDesc();
6 [' D1 Y4 n* Z6 h- Y}
! x$ h, _2 t) z) g3 _" o9 `8 x* b: Y- C0 j1 ^7 c
CIM::~CIM()
6 v$ v; k. L* Q{
% w1 I" p3 V2 \/ G ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );' A& F! L1 \9 w
" x$ m1 a) t8 d4 g4 z
CHKB( delete m_lpszImeInput );
: X% k/ i/ ^8 M8 \* A if( m_lpszCurInputLanguageDesc != NULL )
' {9 T' b" {& U! Y4 P* \8 }6 ?4 P* p CHKB( delete m_lpszCurInputLanguageDesc ); 2 m/ h" ?9 o! w/ C& E
}, l) V3 c r9 |2 r
; v) X. m* Y1 t% K0 O/ t+ p
void CIM::OnImeComposition(HWND hWnd, LPARAM lParam)* T8 n8 h5 o+ T; I
{
1 f8 ^; V1 v6 F5 ~0 Y% [8 i& L0 G if (lParam & GCS_RESULTSTR)
2 T+ B/ I6 r0 V: c$ ]) n+ J {) i0 E, i1 g8 f. {+ [8 M' g$ }
HIMC hIMC; //输入设备上下文) _" Y) m0 D) p' D
DWORD dwLen;8 P$ t5 N& S$ K1 s5 E% A+ n1 }
LPSTR lpResultStr;/ [% |6 A R2 A) o. v/ `1 t9 `2 v
3 }$ W# w# E/ j0 ~ hIMC = ImmGetContext(hWnd); //取得输入上下文
: W0 x! }3 [6 k, h5 L' c+ v% O: g" }$ j6 V; T/ I
if (!hIMC)
! F$ |, ?- c& U. R3 d$ [ return;) F, c& P0 H+ e
! q: |, j$ }7 T- `1 V) ], f
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);; \# m. g6 u. ], }6 q, [/ z
dwLen+=1;/ Z/ ^4 J2 B7 Q( R8 t
( l& l, m* ~3 A' B' t# e: j
if(dwLen)
9 X5 r1 c8 A8 p2 N; | {" O, [9 u; `% v! h
lpResultStr = new char[ dwLen ];
9 g4 Y) W" N1 c6 n( E
: x0 [0 z4 j4 ^0 ? //// 缓冲区已经满了% ]1 J% O4 b z3 y& f. _
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )& b7 X& m7 o; s
{% Z& g) O+ s) T
MessageBeep( 0 );* e# J; D3 c" _* }
return;7 C( p, m+ Z) M) U5 i+ \
}- S1 y. O# s( E0 X' S" p- B
ZeroMemory( lpResultStr ,dwLen ); / d( z/ b+ {) ]; g$ G
if (lpResultStr)5 \$ P( K0 n; l# V% T
{/ n+ v- Z# `0 Q
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
% L8 K* n9 i# z; M. }' `/ |# r strcat( m_lpszImeInput,lpResultStr );
3 h2 ]; z# E; x; T% O) l" p }& V2 {2 a, Z; X$ I8 X' s1 K
delete lpResultStr;
/ ~, g$ D* j8 w' [/ D& L }) [" U: W6 ?* ` S' }1 H; s
! J: L3 G5 M) D, T ImmReleaseContext(hWnd,hIMC); //释放输入上下文
% f, h0 i1 \6 [) v [8 Y } X! ^1 i& ]3 ~) j8 _
% I3 N3 j- y( E1 \: v}
9 i7 G# m. T4 I1 I& [2 J' k$ w$ _0 h- \+ Q; S: z& h
void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
6 Q/ q( v. j0 J{
8 O6 a* `* Y6 b8 C* r DWORD dwCommand = (DWORD) wParam;
1 S: x/ r! _& p2 j' K switch( dwCommand )
# h& L* Y1 U( n7 C t# s {3 |, N/ ]' v" P- R3 w1 H
case IMN_CHANGECANDIDATE:
) X# J' F7 M5 ?* k) X GetCandidateList( hWnd );
9 S+ y4 O4 e. `' | break;9 G5 S/ u# G* Y% U1 x. g
# O' b' B; ~- m7 y! }, v& i5 S( }+ ?
case IMN_CLOSECANDIDATE:% z) } l0 c8 Z7 S4 m: T: V7 \
ClearCandidateList();
6 @$ W" @+ }' O1 S* { break;" [5 C: v( Y1 F4 ?4 m
5 ~; p( z ~: [4 R$ d- U1 {8 B case IMN_OPENCANDIDATE:
0 ^! j: v5 ~% n/ f7 P GetCandidateList( hWnd );
2 B2 d6 l+ c' v& H' w4 O; X7 q break;
# p& y; t0 ?9 t' n3 R# x }
3 g" ]" h, U$ ?, x8 W+ Y5 E: {}# U1 `3 L; k. G: P2 j7 @; ~
5 \+ w6 S/ C& x
void CIM::OnChar( TCHAR ch )
% {; M) G" C1 F' P{- d# e8 u3 ~; i$ X/ L, W
int len = strlen( m_lpszImeInput );2 T m- u! n! d# q9 o
* `6 t0 s! v9 z: c
if( ImeIsOpen() ) //输入法打开状态0 [, G* y6 \' y7 h
{
* q+ B4 a- }4 `' e. d' _' s' M
, l" y# p- [! m9 A8 h9 c }) C6 O; I" d! a- f1 }/ q/ g' v
else //输入法关闭状态
, L/ m6 ?! a& c; | {. n0 D- y( Y5 P4 ]: |# z
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母0 w1 l( G5 o+ L+ ^
{
% ?8 [3 b5 h! ~5 b9 Y *( m_lpszImeInput + len ) = ch;7 g& z- a; Y$ C. W
*( m_lpszImeInput + len + 1) = '\0';' l0 P3 D8 F0 A; }
}* H& r* `! u: {9 _
}
1 Z; F% c, U/ S6 {4 }0 r
, U: i6 a4 t2 y+ `/ ?% y if( ch == 8 ) //BackSpace字符. v8 Y! l% J$ _3 ^8 z m
{7 e9 d6 r% B) ?+ v3 ^! ]
if( len == 0 ) //字符串长度为零
8 J' L" y! ~% x* n' u! W1 T* y6 r return;/ Y2 P. H+ }7 I) Y! m1 R- i2 I8 d
# D, `) ?: J5 @ N# I' c* ?! W
if( len == 1 ) //只有一个字符; r# D) Y2 M) J+ J! x8 N! E
{/ F6 |' _! Y9 p+ c3 C: d0 Q
*m_lpszImeInput = '\0';
5 \2 r* R4 a# b. T! L8 J return;
4 `' Q1 K1 J& D5 T r4 q }8 o8 u2 u i6 E( F, S' g6 M
) N8 d" M8 G8 g- X/ L BYTE cc1,cc2;& w3 @! p+ z2 G- L% A, t: Q5 y
cc1 = *(m_lpszImeInput + len -1); //分离字节7 P/ F! b( h1 q% P$ Q: X) z
cc2 = *(m_lpszImeInput + len -2);6 H1 g! c4 _1 e; o% R& _ |( F
) Y/ P! I- d/ L, ?" ]3 n if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
( X: u& n4 A! t I. ~6 i' ~/ P *( m_lpszImeInput + len -2 ) = '\0';
: F; a+ c( W8 l Y3 _* k else //是英文字符(单字节)
2 h) M$ O2 o5 S0 f# Y% B" m4 h *( m_lpszImeInput + len -1 ) = '\0';; M" D5 `/ F2 E( M3 i! b
}1 }& u$ L& w9 i& `
}1 u! n) a) }- m' B* ]! G! I2 s9 c
: w2 ]) ~6 P; T4 R1 j6 [
BOOL CIM::GetCandidateList(HWND hWnd)1 `9 Q- l K- g2 {$ M
{
, D3 K4 U7 B0 w* y4 \; l7 | }1 r DWORD dwSize; 0 E- b; F) W9 [3 n
HIMC hIMC;
0 V' V) p. n7 x0 [1 c9 k! J8 G8 I& v$ y8 U; e! _
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );* g* P" k0 m& P4 L8 a" T- p8 H
- n0 W( \7 D. ~4 S" G8 g
if( m_lpCandList )+ `0 K6 I' u- W: p+ o8 T
{
9 i$ ^! Y$ E5 J3 ~ delete m_lpCandList;6 r: a- _, A S# l) B7 F! K v
m_lpCandList = NULL;3 C- W- C+ F) R8 D
}
# @7 a- L# V4 s8 k
4 R6 P5 B1 z& Z! t if( GetKeyboardLayout(0)==0 )
& n: H3 ^# B ~0 c: l0 o# u {0 k. S9 e7 [! ^9 D
return FALSE;1 i( I1 d: g: w% O1 \" [# K
}
" o# ~ `8 Y% Y- K. Q1 m9 q. {+ J- N/ j7 ]; H4 F( M
hIMC = ImmGetContext(hWnd); //取得输入上下文
' }( _- H& Q0 C2 R' C* R if(hIMC == NULL)
& g7 T1 b% [: W1 q; P6 c& E {3 c9 i/ E0 P4 O; ]9 _" _% X
return FALSE;( B: \& a- R, C0 ~7 D
}8 y8 J, k, |; f; U( _ _
/ w8 n1 T t( {& y1 i' r* g
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
7 E7 } x6 O" h7 c if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) & K- {: I+ p/ K3 p7 U ]: S& ~
{3 M% F* W* v# }, X
m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
# z7 X1 Q9 P6 K, w' O# q if(m_lpCandList)
1 C# ^- x3 l0 I# P3 Z* T {
$ T+ I3 W- C8 ^& v* F A ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);. j' ]* H4 i" s4 S6 L W$ P
CandidateToString(m_lpCandList);7 ~( F5 l/ T% z. a4 n% m
}3 e* t1 P; ?, z9 {' v
}
, O j" U' B { P/ X: ^* n- g. T6 f# `. }* n. D) m$ y
ImmReleaseContext(hWnd,hIMC);8 X/ H+ z1 g, ^. Q; C% U
9 V/ R6 z, K+ [- v, p return TRUE;$ O* N" h& `$ Y: \! g8 U4 o
}2 y, X9 e# g6 b7 y; m( `( u
, \5 {; W8 T# S t! @; r: V
void CIM::ClearCandidateList()0 n) J M5 L$ O
{
0 Z7 f3 r( B- @3 k9 [0 O0 G if(m_lpCandList)
) C7 j# x4 ], `& {2 @' O) L {9 D/ s" w. |% s
delete m_lpCandList;
D8 B, e" H: i+ O. d: A/ g m_lpCandList = NULL; o) o; j: }+ \, V8 h9 \. r y
}6 x5 Y2 A+ y8 o( D; O
ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );" z( L v; N6 i$ M( ~. P% a
}2 P+ `9 {# D( U Y' p4 l# y
' o Z' D& k6 m$ Q- o4 o& C
0 a1 f( [+ }6 v4 g" J) x1 bLPSTR CIM::GetCurInputLanguageDesc()
3 C" m4 w( E5 ]{1 {3 `7 g# u" G8 P# Y/ `
HKL hKL = GetKeyboardLayout(0); + \/ J" u% ]8 _, u
3 J* @& Y: m, b$ M* K
if( m_lpszCurInputLanguageDesc != NULL )* r+ V0 D4 K1 e. {4 R
CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^
( n8 K0 h$ G/ @+ R. v- Z. b/ p0 i, b& M r2 ^) q# _
int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
) v7 X& I1 q# v/ X3 |/ h
) B2 f( b, S2 r) r& Z8 I CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
0 U9 C; b# I/ h- V, R
Q* f, x1 N. j" A, ?6 E( R if( lengh ); X5 L1 K/ v. N9 G3 V6 |# Q2 y
{1 R& P. C$ G" }- n" A6 `$ e5 H( S, k
ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
' v! Q4 Z) Q3 s2 V- |6 h1 g' W! Y }
5 ]* Y) s7 \. }4 q- t" M: E! g: i% N else
' I7 O% [9 ^0 R) Y {6 h' B$ D/ c. x' a
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );! e- C1 W* A, h. U- s
}
- O2 D3 P! w$ c Y$ n* h# l \/ Z1 i: }+ U2 x+ {9 T" l9 o6 x. K
return m_lpszCurInputLanguageDesc;
, Q" C, k6 c" k# \( M}
. i! b6 J- o3 ]' O8 }1 J* p, N2 L/ J5 J4 s' c) I5 c( t$ | [
void CIM::UpdateShow()/ k d4 h/ f0 P+ X) c( D2 W. k
{& Z5 t& v' D* V* z6 y
POINT pt;1 E9 U, R. e- P* `
pt.y = 450;
8 h9 d6 e1 L( ] pt.x = 400;
" Q0 Q% u$ h/ b6 h1 [) G+ n ttffont.SetSurface( DD_GetBackScreen() );3 \7 H$ P3 [0 k8 D C8 Z5 _
ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述$ e. C/ B5 ^$ W* E a
/ L F$ k5 C5 k! D5 x; L pt.y = 420;" b6 ]- X7 n# P2 H9 ?& d5 t. p
pt.x = 20;) m9 k9 p6 y" @( o
ttffont.ShowText( m_cCandidateList,&pt );! W8 Q# u" h: c; [. h' r
; L. r! o% X3 |! n; T pt.y = 450;
. j( X: A9 `% L+ j+ e( m* d pt.x = 20;
! }/ c+ d) W- M3 a* t. \ if( *m_lpszImeInput == '\0' )
m8 w, y# |9 K/ j# C/ s( I" h; I return;
U9 P. U& r; k; K+ Q
6 ]2 K+ Q. l6 ?& d A ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字. O- E1 N! M- C* {- D0 k7 K
}, Y3 b7 Q% G* E3 W
% P+ |: c" t6 X, o0 U
LPSTR CIM::GetResultString()
: o- T) A5 v# K$ c6 a9 s: Y{
- m0 b' I4 l V; p! ~ return m_lpszImeInput;! ]* i7 E+ ^: f! L
}% D4 j9 O7 y+ r" G
6 N) \! f. A$ G" `9 `( IBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)/ j ]; J- s0 J3 F
{7 N' g: a* Y# v; t Q
if( !m_lpCandList )- }- ?; b2 K R8 Q( d7 b
return FALSE;3 o3 a& u% Q# b* o4 M1 z$ ^
5 w$ y' Z/ g# V2 U! `
if( m_lpCandList->dwCount>0 )
! n2 b5 v4 f: v2 U6 b! s {
, F7 F2 ]1 a. l7 P6 C LPDWORD lpdwOffset;
5 g) p7 J. ]2 L( T l" A
& ~ M) c# Y2 V' y, C lpdwOffset = &m_lpCandList->dwOffset[0];
% ~1 f8 q# T6 U+ k
) z" e% }; D. M# o0 Z& D lpdwOffset += m_lpCandList->dwPageStart;
0 ^# {; w s( ~; ^$ `! V. M: e6 K7 F% v, [/ w6 x1 q$ a
ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );
8 {) ]6 s* Q8 p1 v0 f6 T$ l
" K& X6 z) ]2 J. A8 N+ }5 B d DWORD z=1;
3 x$ M6 H7 Y7 z, x1 k9 o for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) 2 h: g4 s8 b- H o5 p! C0 J
{ 2 |6 a9 S) z$ R! F4 G+ a- |' Q7 V
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;! V; h% z' u5 Q# M' H6 }. i) w7 \
char buf[255];/ B9 a( G7 Z' X/ O
sprintf( buf,"%d.%s",z,lpstr );
! l6 e# ^' T4 H& d strcat( m_cCandidateList,buf );" W" L7 T& w2 V5 g" ^ a2 y) W
z++;
9 [" Q% ]4 D5 J4 U0 W }
- W! K( k+ K& D7 i, p/ `' ?, W7 q5 q" p4 n6 V' v' a: S4 U5 @
return TRUE;: F9 N( V) e# A& {5 G' h
}8 F7 W. S J( u; T. C8 o
: Q2 N. I! I0 o2 F; B* k
return FALSE;
/ c9 n: d3 v# ]1 g0 l; }4 R+ H}6 [0 S! |) ]8 b, A( \/ j
3 k. Y( e1 N. _7 n/ i* N& Z
BOOL CIM::ImeIsOpen()6 G8 K* X" O* {
{4 T3 R- ]4 r4 e0 d) z2 s5 H
return ImmIsIME( GetKeyboardLayout(0) );
, h5 b/ r+ W9 |3 ?3 c" b, Z$ N) ~} |
|