|
|
//******************************************************************//
" c3 c- e3 k; L//$ V2 G, D5 T0 y- v$ ]
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
/ o! i: W0 G7 h// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
$ E6 `& s3 e: u& K3 o: P// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net+ Y! X/ E6 t }# Y; Q6 }
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT
3 U, N4 o. [+ |1 c// 为显示信息用,可以用其他方法替换如 TxtOut() 等. n* \& J; y! D
//& r% N9 D! B2 ]( ~3 t
//******************************************************************//# c6 a3 d( A) b& v2 Y3 z X: l
0 L7 h& x3 ]; ~0 {1 Y, d//////////////////////////////////////////////////////////////////////, j: F$ X* x" Z$ n
//
3 t8 S8 v! z; q" s+ l, y3 B// IM.h: CIM class (使用系统)输入法类
9 U; y" W+ o% {// 2001/4/30 Write by Jerry Wang1 u% m- X: a* N( c! f
// 感谢大大鱼的帮助6 w5 }; `. U7 a8 C9 @
// Need Lib: imm32.lib& Z$ i L) [7 o& ~) B! U: i* H
//. M+ `! L0 D' f( J( V; `0 a8 e
//////////////////////////////////////////////////////////////////////
; Y3 ~( L; O0 b8 T( q2 Z- J% p9 `: E- _5 A! x+ n
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
1 h( ]$ E0 s/ M4 k! v# Q7 ? U#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_, r9 D& u9 ?6 r, A6 t# R8 h
5 N7 y% ~: R: a; W8 _#if _MSC_VER > 1000
r8 J4 M9 V, v2 T3 C, x#pragma once3 E, L& O: G/ ?8 g
#endif // _MSC_VER > 1000( T2 v8 K5 j# d
" V- v; a4 |) `3 _" B' D
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数& k; m" T& V4 U8 {7 w
$ J4 }9 L/ e% W6 O# y' q
#include "FindMe.h"8 |. `& G% o; Y% w9 c! n$ g
7 q+ Y4 [$ x9 N( L4 Pclass CIM / i/ a2 Y V1 ^
{3 |) q% D" T* n8 E
private:
) n7 h2 S& t. z% ^" J0 ` CTTFFont ttffont; //显示信息
7 q; ~; m: O5 G/ `4 V" r LPCANDIDATELIST m_lpCandList; //输入法候选文字列表/ ]9 }7 R) h6 Q) k7 l6 T: `
LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针, s% w0 f3 C: b6 c2 Y
LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针
) G/ o+ H; |+ r, v- I4 a" \ char m_cCandidateList[255]; //候选文字列表缓冲区
" m! t% Q: q! x char m_cInput[64]; //输入的字母
# r- c/ Y$ |( n. }4 Q) A5 ~0 V9 F- G
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串6 ?6 X6 V S+ s( A! L
+ s3 b$ \9 V0 P$ k hpublic:
* I" F/ p' ~ Q- h: D$ `% ~
+ }3 Y) h* i+ @/ d2 ?, D7 Z CIM();
/ m9 Q, M& J* ~; Z virtual ~CIM(); M7 [- b: B; C( a d$ S2 z
3 |1 T2 J' f% p. E, B- I LPSTR GetResultString( void ); //取得输入的字符串6 X, s3 V4 B# h7 B7 w
* }) m6 ?! c4 h( h9 i void UpdateShow( ); //显示输入法信息
5 j- s+ n; j8 ^. \" J
4 r! k7 v# o# m; }7 J LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述 g8 [5 M% ?6 B$ S9 d7 s6 H' y7 m# Q
void ClearCandidateList( void ); //清除输入法文字候选列表
" n1 {* Z, H s3 i1 b# ? BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表
, ^, o" C9 p. A" q) {5 [ BOOL ImeIsOpen( void ); //输入法是否打开
# ~6 n& k7 d! f f! D: [5 U void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息 f" P+ L* S% N# ^9 |3 {
void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息6 I: h/ {4 R/ c2 P8 Z. a
void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息' C% a8 A. A% U4 f1 [5 X
};
) q- X( K- L. [$ z# p/ M8 R+ p
" P' t9 M% v! h" E; Y) P#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)8 b6 k4 R; |2 m1 v
" y8 J& B, q8 _( ~( m) C8 p: Y1 u, r8 J- s9 ]' z9 `" C" `
6 `" {( i, a7 f) a//*********************************************************************************************//
4 W7 E! ~0 O! }$ x- [" e- Y- E6 g1 B7 o/ t3 ^
//////////////////////////////////////////////////////////////////////
% p% p% o% ]0 T* |6 x//! j+ P2 I2 o0 w# w# D6 w
// IM.cpp: CIM class (使用系统)输入法类$ l |5 z3 s: _$ k0 P) J" i: y
// 2001/4/30 Write by Jerry Wang
3 [! @6 ?9 m: [( f// 感谢大大鱼的帮助
; m% k4 A- }0 v* C9 L// Need Lib: imm32.lib
: x, u1 ^; W+ {4 S/ J! Y6 B1 d//
; d# j2 h& {: ]( O//////////////////////////////////////////////////////////////////////! c2 N6 b; L3 G4 f X+ o8 R
1 G+ s9 V$ O' _9 M3 p#include "imm.h", k* C, X+ t4 o$ }* ?! s
4 m; Z2 | P& l$ Z//////////////////////////////////////////////////////////////////////0 G4 i' m: T; q
// Construction/Destruction% @! p$ E: T6 t: o
//////////////////////////////////////////////////////////////////////% d5 `& e4 B& f# L
8 D2 r- t1 p$ _
CIM::CIM()2 B4 j( R% X6 |* ~6 }" X+ [
{
# k" r& s; `8 K* {; O5 ~/ _9 d4 G8 ] m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];; O4 [4 D9 a! @# J4 W' }4 c A! n: e
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );* F3 _5 u1 |/ ~- X* \% W) s
*m_lpszImeInput = '\0';: }. {5 d6 H" u9 B7 k
*m_cInput = '\0';
5 t" b' Y7 w9 }, @5 E4 B# |0 P& T; |5 B
ttffont.Create( "黑体",15,RGB(255,255,255) );
! @- E+ {7 K9 y8 K* m- s GetCurInputLanguageDesc();
1 |3 t; {8 N; T: f' @}6 N& r3 r- A) R/ f; f& e' n
$ W2 k3 B1 s# Q1 k6 M, N6 n
CIM::~CIM()
" ^$ n; Z4 ^- a* w3 ]" k8 Z% o R{
5 T7 o; b# L8 |: h9 w$ b# w) U2 g ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
" x9 O8 _+ {5 L6 v
( c/ C( N: ?. Z$ q) [" t CHKB( delete m_lpszImeInput );
% [! u6 A' w( h6 n, O, _0 z+ S if( m_lpszCurInputLanguageDesc != NULL )5 E# R+ _5 d0 c" A
CHKB( delete m_lpszCurInputLanguageDesc );
3 o& l( D( q- P3 H}
& {% P- x, {1 [8 ~1 X) b1 ]( C
( w2 x8 p9 b j9 W/ Wvoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
1 `5 H" ~4 |3 R- h$ b0 y, g, n. `{
" a" y2 h G2 w& o8 _ if (lParam & GCS_RESULTSTR)
' X* J1 [ N" a, P' G; ^) B {
! F: [/ O, }3 L; F: `4 C( a HIMC hIMC; //输入设备上下文+ _. D: F5 Z0 S# Z' Z
DWORD dwLen;5 N3 D* w+ N5 k, A
LPSTR lpResultStr;/ X+ b/ C3 Z& |% V( J
7 S* H/ b5 Y" E# r
hIMC = ImmGetContext(hWnd); //取得输入上下文
7 V- p6 I% Q* {, N- `+ v6 y4 p: M" E- l# k4 \0 O+ R
if (!hIMC)
' B) r5 q" z0 J6 I- B return;
& x9 Z0 i* p' \0 \
1 J( o" X8 r& o; }& D dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);( L, Z8 }3 E9 [, B) ^( q3 ?- n
dwLen+=1;
% H' {7 W: M- Z/ N$ F, O6 O) i5 P; a
# [+ I+ q+ b' t- p if(dwLen)
( ]" h$ J! r2 W2 h, x& B+ c {
* G- X5 ^+ K- Y9 ?: Q" \ lpResultStr = new char[ dwLen ];
( y5 O/ K1 ^! B" X6 S/ v/ i0 } A9 K+ L1 d9 o, n7 A
//// 缓冲区已经满了
" k. M! Y, b8 G4 J if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )2 L( R. `5 h8 f0 `' [
{
# j+ J* t9 i4 Z$ N% `' I* v) P* v MessageBeep( 0 );
" g1 p0 m& j5 @ return;
" A3 V! e& n' `8 } }1 x5 k+ H! C' h# J
ZeroMemory( lpResultStr ,dwLen );
$ v( ~! u" I0 X' F2 c5 }1 i if (lpResultStr)# A- V0 y2 O% l5 [. Y
{' a! W6 o2 x8 m7 j
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
3 |, ?6 F, o1 G2 K strcat( m_lpszImeInput,lpResultStr );
' E. o, e. b3 i# Q% l" B }
2 q. Z: _# {. S1 z% B) d delete lpResultStr;
: x/ Z' ]% B! s5 o6 k: H" k }0 W3 E' J" L: y9 u! i$ q0 c
1 g* a. q: J" S7 V& |2 w
ImmReleaseContext(hWnd,hIMC); //释放输入上下文
8 M0 W' u9 n/ c* {: e1 U( [! Z }
5 P& [1 p: C# o
I8 u6 N; R# B: g}
$ J' V1 a1 f+ ]* q* ^5 k/ S Y. a! n: k9 D/ Y9 w+ [
void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
4 q$ {& F! f. Z( u( u+ g) H{
+ ?/ |# K" k3 }% r4 V H3 I3 ` DWORD dwCommand = (DWORD) wParam;
- ?. M3 z7 u5 \9 A switch( dwCommand )
; Z. T& P p# i, h0 t' J {
$ Y& b3 f! s! O1 X7 y4 { case IMN_CHANGECANDIDATE:
# ]* u7 w3 P, j GetCandidateList( hWnd );, L7 {9 Z' G) o5 j' K4 V6 V
break;
" U }; o! m' G! C4 A7 I% y; W3 ?4 J0 K5 u" a5 ?8 g% @
case IMN_CLOSECANDIDATE:3 R: _% R2 t' D# C8 {/ k0 a/ r! V
ClearCandidateList();
$ f9 c; F' H: [( ] break;
j8 g$ Y2 ?+ z8 F g+ d6 K9 X; Z5 E$ ~$ N. l/ ~
case IMN_OPENCANDIDATE:0 O) G- F1 m" q& b3 g& @4 e; _
GetCandidateList( hWnd );
9 E+ X, }8 ] F; O) C break;6 Y1 h8 B1 ~' T* A( J
}
1 Z3 q8 R$ b1 w, n( n9 b7 B3 k5 U}
/ s4 X6 z( a1 s% a |: E
) b3 g. O' i5 h. o$ U, p# zvoid CIM::OnChar( TCHAR ch )
' o" g6 w; }% u{! q9 \( n0 u' T' h
int len = strlen( m_lpszImeInput );7 @' h4 k2 t) ~/ q. t
+ o! d6 L& G# S; i; g
if( ImeIsOpen() ) //输入法打开状态
; K! f9 Y( a$ W# B {
% S% P* Z$ R$ D% H n& P$ K( C% x! y7 {. B6 T1 Y8 x2 c$ c, \4 m O) l
}
6 H- n6 Q' a) K h& Z( I( x$ B else //输入法关闭状态1 ~. \+ b. A" Z% K* D' e
{6 {: W& V* Q: f- b5 Q I' m
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母' \1 X) z6 h6 V6 \6 \: D
{- j0 s) c6 }" ?3 F
*( m_lpszImeInput + len ) = ch;
( n# g. v5 m, v' ^ *( m_lpszImeInput + len + 1) = '\0';% w( G1 @ k+ A$ Q# x2 u$ O
}' t9 V& Z8 Z: c' ^3 B. b7 e/ e1 S2 t
}
: K5 ?# K9 F8 e) {& l, u1 S9 E3 \' V; ]& I
if( ch == 8 ) //BackSpace字符
% z0 A8 [ i5 w" {" A$ d4 H- _4 t; l. | {
1 D1 R! w) ~3 ~& Y if( len == 0 ) //字符串长度为零2 J4 Z9 F# [/ h2 X: `5 K1 a
return;
" q/ F+ E- z4 \+ a+ V a/ O- L9 m x# C) z# k- T n, Z+ a9 \( X
if( len == 1 ) //只有一个字符
4 C* g. G3 l G- t$ M4 L {! ^- {' N; |# h# q! d2 c$ d
*m_lpszImeInput = '\0';
5 z9 J1 [" u( D return;
7 b0 e8 U* T; {/ j }
; v6 O# `0 i" {# ?; F- H: z3 ~% c1 }4 z% P* \$ U7 p8 K1 s
BYTE cc1,cc2;
6 X2 V4 R/ e3 W ]$ n& W- m cc1 = *(m_lpszImeInput + len -1); //分离字节
+ {& _7 V5 }; W' l3 T cc2 = *(m_lpszImeInput + len -2);
: T/ n) q8 R2 p* N
( c8 N! b9 @- G" I! i3 z if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0/ g' Q' E& @! V2 _0 B
*( m_lpszImeInput + len -2 ) = '\0';
: E \" H2 Q `5 ?: z- l1 `3 _ else //是英文字符(单字节)* P) V9 z& @8 [
*( m_lpszImeInput + len -1 ) = '\0';: F% g1 i/ f H/ t) e7 Q4 C$ X Q: G
}
* Q- T2 i1 ^8 @- Q: M2 p9 t}
/ U8 l# @# w( V) b5 U% K! X
/ E, {2 ~ h2 C \8 ]$ M+ yBOOL CIM::GetCandidateList(HWND hWnd)3 v9 Y3 ]1 i) ]3 {0 V1 }
{7 m$ q8 {% D$ j4 H
DWORD dwSize; . X; D/ k% @0 L8 T
HIMC hIMC;
2 `; f9 x5 r0 g# | R+ L, O) P" w! q8 v+ R c' Z4 y
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
$ k/ Q4 A2 p( f2 j! ^3 N, B! T; B, s/ \ j
if( m_lpCandList )
" g' t8 Q& A% t3 G) m {
/ g7 X) r2 M& d; R0 X2 m* L delete m_lpCandList;
/ ~# x$ R7 c, I7 s7 v: z0 B6 H) ~ m_lpCandList = NULL;3 H- e' `+ Q8 E0 n6 |+ S& [
}# ~9 m# T# @) \! C
5 y1 n2 m# i) T. M1 D if( GetKeyboardLayout(0)==0 )
5 W3 u: y$ Z4 N( ]. Q) G \ {; }. ^! A" _. m7 ]' n4 x
return FALSE;
/ }9 l5 V9 e' z8 k0 k }
- n4 @2 x* ?" x% x' v2 ?, f: e2 q! g. P y
hIMC = ImmGetContext(hWnd); //取得输入上下文- e; U3 v+ @9 r- }
if(hIMC == NULL)
1 L3 W( z- T7 K$ M: k {
. n. T9 r# f- F$ a* x return FALSE;; j6 k; Z' v# x5 j: D {
}
4 o* Q2 t, v3 ?0 g4 t# W0 ?- |- Z6 }- k
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );- v- x+ B7 ]) U0 }$ A) Y
if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0))
+ v& l7 W/ ?3 H% [: g' v: k6 O i5 A {
# V( b( k) a& [+ n* | m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
# U. d a G6 [' l5 r if(m_lpCandList)
6 j, N: k5 }$ N, { Y5 g3 a. O: R1 X9 h {
0 v/ H2 @: e# J B: e ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
; d T: Y1 p2 J, _7 i* E CandidateToString(m_lpCandList);
) v& E4 I% v$ S) I0 v1 \ } P4 @8 k0 x4 `0 _) K3 Q+ H
}
0 L/ ~5 `# O6 I4 C' K- G- v X0 v- w/ O( e+ D! @9 F
ImmReleaseContext(hWnd,hIMC);; i; j0 C& r7 z% M# g
+ i! `/ A: e9 w# Q# I. {" W return TRUE;8 C, H: N3 \: z8 ^1 x1 I
}1 L, M* L0 [! j& H" n
" K1 s/ ?0 Q8 p! s/ \4 N
void CIM::ClearCandidateList()
3 g8 i) m2 _( _4 `: g( V7 Q{; z8 I @' s6 t: L
if(m_lpCandList)0 x% w2 V+ h3 @% N8 C
{
$ E, n o" E; o8 o4 M/ H1 H$ J6 Q delete m_lpCandList;
7 S# b; e9 X) ^ m_lpCandList = NULL;0 F% p/ R0 ?6 T0 E) C
}
4 a8 k9 ^. U; n, b, m ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );2 e/ }8 V/ m8 r$ y: h
} i' Z$ t- ~# x- f0 E" k7 ?
* g; {" R7 E! N, N' Q
1 N+ p* |! {7 ~; `; s0 B" dLPSTR CIM::GetCurInputLanguageDesc()
* D% P2 Q! s2 M/ ^- z{% ~: i% @1 Q5 z% `. a9 p
HKL hKL = GetKeyboardLayout(0);
& I% R9 g8 H: H9 Z- N8 r) V. z% ~1 q9 ^& I ^, d
if( m_lpszCurInputLanguageDesc != NULL )
- L7 `/ ^( u8 [% @$ s y( ~# x CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^2 F4 j8 o; h- \ j; O5 G/ h
( G0 W$ U& [# y1 W% F int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度* \; l" s5 N: M
( T' m8 X4 Z z CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
r$ e- d2 z, u. w) s. u L$ C5 Y' \2 n8 z: v7 }; g
if( lengh )# A+ ]( D* R8 G; P* m% I( H( I' A
{+ Y3 T4 H" h( D) D8 O
ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
6 _, d* I9 [0 Q+ G) S }
6 {8 t% N9 A& j: M4 T+ r% S else$ t0 y0 G& {+ L" u, g2 y
{6 V" _5 O& R5 W" [3 y+ W) g
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );
- Y+ J( i/ r$ }) j, y }- @( S* E T. J% |6 b5 T) ~0 ?
$ L# k+ w w) f4 l! _ return m_lpszCurInputLanguageDesc;
/ x) k; n7 ^+ R% {- z: w y, _/ V}
' U! i0 K# a {5 J% Y, P& o5 M' l; ]: A! a
+ Q4 ^. v5 Q3 A1 @( I& Zvoid CIM::UpdateShow(). E& y" ]; h1 ~+ e2 E0 B8 u
{. K# _9 ]2 s% d
POINT pt;
2 n+ B5 A1 ~ [+ h( \0 R$ f4 ^* A pt.y = 450;
8 Y, P; Y( i1 ^8 i. r( p+ c" P6 c pt.x = 400; ( w$ p! e! v* J6 ?
ttffont.SetSurface( DD_GetBackScreen() );! D; K0 X6 C: d. j7 [" v
ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述
* O- h/ i$ m8 Q, t: O& A; ?% w9 M7 i& i4 [
pt.y = 420;
1 C( y# f* t& y- z pt.x = 20;2 R) s; G' R7 K( u' w
ttffont.ShowText( m_cCandidateList,&pt );
3 j9 v9 Z5 T* x U& w4 n. i" E1 v9 N5 E! Z+ X; Q
pt.y = 450;
* c( e1 d3 V6 n' b! _, ~ pt.x = 20;8 x; H9 B6 N! [9 f
if( *m_lpszImeInput == '\0' ) i. T1 o }% O, Y' [* |
return;2 H3 u6 N+ b/ e: X
9 M( t, f, C# S( @# W6 `- f( e
ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
5 k W# Q/ ?2 N9 M2 i9 _. b; s1 V8 B}8 u* \0 K8 q: V
, K% ~4 E( ~( V5 ~) `7 E$ f) C% w
LPSTR CIM::GetResultString()5 r6 Z- S3 M4 y
{
* ^2 o/ \7 _9 b( a$ @ return m_lpszImeInput;9 h7 J- L0 i6 f% `- R P
}8 I; n. u8 ?& x' R
b3 Z, P, T& RBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)
- q; ? h2 h7 L2 k8 g{$ S* f5 k$ N0 K7 w1 j: B, S
if( !m_lpCandList )
" |8 C* N2 v9 q( u/ X# n1 A* ~: B return FALSE;+ F H) u7 _" `! c; I6 z& l
) z& s0 g: V0 ]' \( X. T# [ if( m_lpCandList->dwCount>0 )
) i; {0 J* v4 M {8 B4 S& \0 Z4 _, `- [* d7 d1 \6 F
LPDWORD lpdwOffset;
6 |0 _. f$ N6 G' f, |- i- ]# B2 I) L: B# D+ ?5 A; Y* k( G* M
lpdwOffset = &m_lpCandList->dwOffset[0];6 V1 L' a( L: X" T ^/ E4 @
" C7 v& L- ?! a# y. z' _' a/ `
lpdwOffset += m_lpCandList->dwPageStart;
$ @1 c2 K" k( P1 k R# V2 U
d, B( D3 d2 Q* p" ^ ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );/ |7 z {. e$ K5 q4 L1 S$ a
5 p$ I: B2 D+ E9 k9 v
DWORD z=1;7 L9 y/ m6 m; q% e* D* A: N
for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) B; h- I+ F" z+ W& g6 V
{
5 [' U D; M. F9 [9 v1 x$ t/ m X LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;: x; `$ ?3 S; Z, ]' I T1 c% F
char buf[255];
* p/ U5 z/ I# u7 y/ x- ? sprintf( buf,"%d.%s",z,lpstr );
, Z; b$ I9 c8 g4 w4 y5 Z7 y- D strcat( m_cCandidateList,buf );
7 Z% }* i$ ]: T7 e9 P4 \ z++;
9 L# A) G" S: d/ N1 t! S( w/ E/ ~/ m }/ G; d9 _1 W0 S& u& C
- g% \6 W0 n2 R return TRUE;. w8 J: f5 c0 { |# H
}; u- Z# I7 N! v( f
! Z' B$ P# a0 c V return FALSE;/ G+ H& f0 f2 C: d, i; d5 I* }
}
0 l" R4 H9 Y6 \$ }5 a8 E" a% E& A; d) X1 F+ h- i) p
BOOL CIM::ImeIsOpen()
+ @6 ]; q1 }& g* z8 Z) ^7 I; H( }{$ J0 V2 y% a9 Q- r! g, v4 [* c
return ImmIsIME( GetKeyboardLayout(0) );. G# E& F7 [2 d5 j( [( N8 M, k5 F
} |
|