|
|
//******************************************************************//
% {2 n) ]' J" A' L) D//8 t- @& V M! f) i7 G
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家9 M3 y! i5 f/ g) Q
// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
, M f q' u+ D- H0 {; w2 _5 c// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
& [9 n# {! d. }2 ]9 U// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT: \1 O. ?' M$ L O0 u
// 为显示信息用,可以用其他方法替换如 TxtOut() 等0 i- l' R. z" f- t$ ?' u' R- g
//
; j8 T+ w4 t4 z( W, K//******************************************************************//* [6 N K' d- ^9 c2 }
`: ~; G3 Q H. e5 w
//////////////////////////////////////////////////////////////////////6 `. w0 c2 N3 c. B1 h8 I" C& O
//
9 E& |/ ]9 s# ?4 F. Y; W' P: Q6 R// IM.h: CIM class (使用系统)输入法类* n J" J) R+ O8 Y( ? T8 C
// 2001/4/30 Write by Jerry Wang, J" z+ K/ ]& I6 J4 Z" }. Z q
// 感谢大大鱼的帮助. P" e' k+ T/ U; e' @1 Y; |
// Need Lib: imm32.lib
% t# q* A: `0 V3 W/ s% b6 g//
4 r8 D* ^6 O$ s, K//////////////////////////////////////////////////////////////////////
# f( U+ K! o" R$ t( h0 j
7 Z+ ?; Q! a9 K. E3 E' \( Y7 _#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)0 B0 E$ c* y m! \
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_4 g8 b6 H2 v, C! J4 J' _- E9 _: Q: `
# x6 _. b* I+ Q/ j4 Z9 u3 g#if _MSC_VER > 1000
. D9 b8 V, b6 W- f/ e: k0 |#pragma once1 d* y, e1 Y1 w7 y
#endif // _MSC_VER > 1000
% f1 D: `8 X6 u5 r$ q0 i/ R* ?, [: o2 y. j) a7 c3 n
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数6 T) r( J" m, v9 k6 y
: U+ T. s6 @& e. B#include "FindMe.h"0 D1 h; ~6 X4 [$ t% ?8 p9 }
8 q- d5 d! A+ j6 F3 n6 Y5 b
class CIM
9 R5 m; d# q! k5 b& n{
- ?+ @( j8 H/ D9 V8 ?3 n2 e7 eprivate:
: i- s) n+ V; q2 j! l M; e CTTFFont ttffont; //显示信息. ~# Y [2 G r7 h. S
LPCANDIDATELIST m_lpCandList; //输入法候选文字列表
+ l E* A% ?6 |5 U0 [ LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针
9 M( R) u, {+ o; U* u0 p1 J LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针& ^: B6 U4 q; O$ t" X% M6 b) D& X
char m_cCandidateList[255]; //候选文字列表缓冲区
- @: p: H7 R7 b* F! E1 J char m_cInput[64]; //输入的字母
3 U) D# ]7 o3 x" A, S' v# B+ Y6 k' k- o' p3 x0 T
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串. o) [" N+ H6 z7 {, x/ k( p
/ u3 k; ]* H- R4 B
public:
* K; a9 |4 P" c" K8 k
# o9 I, q5 A0 _5 ` CIM(); E4 c+ x( M B+ K! x0 @4 |9 M; v
virtual ~CIM();
8 `2 q! C' R7 Z; C% \, w. s5 x( ^& F% x5 x9 _
LPSTR GetResultString( void ); //取得输入的字符串 n! ~0 M5 F; c) J, x+ f
& r* M* o$ H( ?; }9 }' ^
void UpdateShow( ); //显示输入法信息
7 ^3 f9 W+ ~9 B: ]0 o: t
3 ]. P$ U" W! _' C LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述
3 i+ \- S8 C6 c4 d* W$ z void ClearCandidateList( void ); //清除输入法文字候选列表( m+ A6 t6 p6 p: L) p
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表
- r- a' e& T6 p BOOL ImeIsOpen( void ); //输入法是否打开
4 l- i+ t0 [( z void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息7 P. F# r3 Z6 U1 l f0 Q
void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
) f. c& G: [6 W, s void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
6 r7 N2 d( c9 c};
3 E O+ ]: W* l0 ^6 h
6 M- w! J: g1 O) r#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)( g/ [8 R6 O/ m7 r8 z4 x& h
; q5 Q! P# _! a7 ?3 S x( a
9 W7 @3 D, q3 n) l
5 Q* ~$ a* c- O8 i5 V7 m0 a1 ?
//*********************************************************************************************//- z3 {- ?5 X' l1 k
2 V, Y$ i$ H( N' I$ Y
//////////////////////////////////////////////////////////////////////! i3 s, Q+ o! C, ]" B& Y0 j9 |
//
: @( T* _# a) A" p. _// IM.cpp: CIM class (使用系统)输入法类
7 T) d8 W& R. a& A. @# B# E( M// 2001/4/30 Write by Jerry Wang
/ y2 O- k; x9 N$ i# r) G// 感谢大大鱼的帮助% r' r5 _" V7 h- V2 Z$ X: ?
// Need Lib: imm32.lib( ~# B4 _* a* T
//
, @* `, r; V1 @# c6 j, k+ v2 k//////////////////////////////////////////////////////////////////////
& [+ ]5 d# |9 n# e- N+ i5 w3 z
* z8 `* m& {2 J6 J2 F2 `#include "imm.h"
! B+ O0 T4 ?+ y' x. l
3 n6 u! k# b- T! ~//////////////////////////////////////////////////////////////////////
! }$ L2 s9 y% n+ d// Construction/Destruction, s, I9 P! _5 U1 @1 h6 W; Z9 y; U
////////////////////////////////////////////////////////////////////// j: K% s7 U8 |# Y" \
: F( f4 S2 f# d+ v# Z. N- G5 Q V
CIM::CIM()
! f. l" z" o! K; [2 {8 F{1 x# X. U( l8 c9 z, {' Y6 n
m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
N) c; s) o4 B3 n" e ]) ] ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );3 R0 q5 z* S, Z8 r" ?4 }
*m_lpszImeInput = '\0';
* Q- R% E" d9 t; Y/ P *m_cInput = '\0'; p7 S: {) x: l: X) ?7 Y1 j$ F6 k
$ ~( q! J6 q) i4 s! ~; p
ttffont.Create( "黑体",15,RGB(255,255,255) );9 ?( j8 Y6 @/ Q" Y; w& S$ k7 w
GetCurInputLanguageDesc();
" w7 A, \( |2 G3 d. g& @2 \}
" m2 }: b" E$ \7 W5 J# |
c% L" Y0 y; q R. ~; E6 HCIM::~CIM()
) o+ @2 a* d6 X/ o7 ^% K$ s! s8 U{
& ~% O1 M) x- U- m ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
" F5 P9 i& J% `
8 t& w+ O: ^( K w3 k4 N! Y CHKB( delete m_lpszImeInput ); 8 s& w5 V6 D* v9 \- {8 R; |" E
if( m_lpszCurInputLanguageDesc != NULL )* o. I9 B: Y4 R/ }3 w7 k7 ?
CHKB( delete m_lpszCurInputLanguageDesc ); # J4 B3 \) t* S% v8 U' @
}
8 h9 H0 B/ q' ?+ d( B: [8 F- T# ?" n3 |3 g
void CIM::OnImeComposition(HWND hWnd, LPARAM lParam)+ F$ h, B6 h$ J5 |
{
% [0 C6 R4 U" s" L# { if (lParam & GCS_RESULTSTR)/ y' `# @% Q9 b) }' w* P4 s
{2 G x* M2 f# u0 R4 l$ X+ K
HIMC hIMC; //输入设备上下文
% f$ | C! X6 C1 n DWORD dwLen;
- x; @: h# @ O7 l, s Y LPSTR lpResultStr;
" Q5 m) r4 L9 G7 c
3 H _6 U+ C$ z' O& f3 X8 ? hIMC = ImmGetContext(hWnd); //取得输入上下文$ k. Z* v6 M' G% A0 D
' {. a8 `% S( o" i# m
if (!hIMC); f/ z" E5 t, P
return;
: Z. B) r" T# o+ k: v M: V" C1 G) k
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);; Q, i; ?8 p& |" o: v( f
dwLen+=1;3 I/ c q! I% C
1 [ B/ o! c6 j! n" ~+ j9 i if(dwLen)7 i+ F9 c. Q" T
{) N k) b5 C5 q+ B
lpResultStr = new char[ dwLen ];* ~" f! Z/ [8 q9 R3 R% y
5 H$ X3 a$ Z y" w( N/ y
//// 缓冲区已经满了
. j$ Z: @# R5 b& |$ E if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )
* o- p( F* E' U' i- P: K- D {
$ w# l! u* _8 Q3 t1 E MessageBeep( 0 );5 T: {6 f$ {4 T# o9 N$ i3 z4 B
return;2 y4 \# c e" o4 w2 l8 x4 b# D" C
}
1 M0 N; H/ R" m3 j1 X, k ZeroMemory( lpResultStr ,dwLen );
/ N4 ?. l8 Q8 r- ]' C: d ]) p if (lpResultStr)) y" i/ a! | {1 |( ~5 ?8 v
{( n; d( A/ [0 B0 H9 G! J: M
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);9 K* N) G ?8 M2 z+ `
strcat( m_lpszImeInput,lpResultStr );
* V3 N" F( ~; i5 {" z6 k/ `/ e }1 X$ I+ P( K4 n$ ~& n: B( l4 E
delete lpResultStr;$ B! C# z# P# k- W7 N$ N z
}
# e6 A( v( |8 m' J- G, D% \6 x! ]; O* x3 _ {
ImmReleaseContext(hWnd,hIMC); //释放输入上下文# n; r2 ~9 |2 s9 C3 ]! `' G
}
7 q; t, ~' e1 e8 u& m
( i1 s& n+ w+ @}2 N( X& `2 r7 `( D f/ e: [( ^5 m
, ~0 n1 v, P; Y# f* c7 G
void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
" d: q ?- w0 h5 k ~8 P4 i$ X{1 R! {3 ]4 P- g1 R2 m0 e
DWORD dwCommand = (DWORD) wParam;
/ l. G3 j' L# U$ ?0 o! L switch( dwCommand ); V; n! v9 p4 m, {6 i
{. t4 L( L) E! P7 F! F
case IMN_CHANGECANDIDATE:+ z( s6 l9 l9 Y% ?8 U! d
GetCandidateList( hWnd );
9 _6 p' \& {( X4 `1 a1 `( ]# ` break;
6 W1 f; q; u1 E: l7 B( |0 T4 @7 r. K3 x/ p/ I- z) n R( C. X8 f
case IMN_CLOSECANDIDATE:
: J1 T0 B+ q# ?( K; e8 k0 {. X ClearCandidateList();8 `3 v6 ?; }2 R" \0 m% `6 z5 H
break;
# _0 Y. N% @$ L$ n P* M8 f% z, ]& B8 p3 v5 N4 f6 m3 O. N
case IMN_OPENCANDIDATE:
( K9 b+ ~4 x3 E5 k( h* I# w9 \ GetCandidateList( hWnd );2 U6 M% {) T+ m4 O; c
break;+ W/ n: ?1 S) p; z# C- i# E) e1 \$ W
}% ?1 D0 j @8 ^6 S9 |
}
! j; J u+ u- @4 \9 }+ Y" `. |
void CIM::OnChar( TCHAR ch )' d% k; {3 K3 |5 O @
{* P7 T! }7 Q9 R2 o
int len = strlen( m_lpszImeInput );
% H; }% [' }/ q) r- i! W
2 _6 C x: K* w3 ]9 t7 \! o if( ImeIsOpen() ) //输入法打开状态7 [7 K2 M7 n+ Z" B
{
% y! k k, F, {4 k* V
0 f4 L* x4 F% @% ~+ G) D1 R }$ Y- `$ a8 P. l/ I! ?" I0 ^4 J1 W: S
else //输入法关闭状态( ]( A' l+ M" G' T% U( H* [, L6 [
{+ t) h) `1 N5 Y3 ^. N' T
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母
1 z6 f& a# S; h+ o; {- S {
" a9 O$ L( F/ T& ] *( m_lpszImeInput + len ) = ch;
5 ^! {+ d- F0 g n# t *( m_lpszImeInput + len + 1) = '\0';# F1 Q6 a& O" ], q2 ?4 K
}7 v% H# n1 U& b, {) v) ?
}" b1 m. i* M J& l4 ~
4 y P3 d6 e2 N5 [' x
if( ch == 8 ) //BackSpace字符0 @/ Z3 @( [4 Q
{9 r/ m* V3 v! w# N3 W0 a' ?
if( len == 0 ) //字符串长度为零
8 s6 c& Q6 E+ a5 H5 ]& k+ x, I return;0 s' h. g: B' l, x& ?/ p4 n1 Q0 T
5 b% h; `; d! b3 A3 N
if( len == 1 ) //只有一个字符1 k* s7 ~# L" l' r5 r! x& T! S$ s
{6 _0 x; S/ N4 e1 k. G* `4 B
*m_lpszImeInput = '\0';9 z; ]% }. Z. E2 {
return;
( V& K& G i) x3 o }
3 L- B4 o+ }. B1 e' [. \
+ w! Z" Y/ Y2 X$ \1 o- y6 e$ h } BYTE cc1,cc2;
6 B% E- w# U; }# F6 N& k9 n0 \* F cc1 = *(m_lpszImeInput + len -1); //分离字节
4 U: O" }7 T0 l; b9 T7 x- M cc2 = *(m_lpszImeInput + len -2);4 R' k* v( J- q( a$ R
+ D( B$ ] {. N/ k/ c. t9 {& E if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
5 Z: G( d( d" S3 l7 k+ n: h9 W7 `+ | *( m_lpszImeInput + len -2 ) = '\0';) }0 u O& v# L) u# j
else //是英文字符(单字节)4 q: l9 b" |' L0 x
*( m_lpszImeInput + len -1 ) = '\0';- ?+ A5 y' I! s, x
}
& [# I( C! z# L& C$ Z- I3 ?. [! X}
J# }: e2 {* W; V9 H' ~( O
' ]4 L, D6 t5 V( _" p5 IBOOL CIM::GetCandidateList(HWND hWnd)1 P- U' M" |8 a. q, x, O
{* _" u/ V" c- U0 R; y. P
DWORD dwSize; 9 e% j5 ], B, K( @% i9 H; l) z+ ]
HIMC hIMC;
. c _) V' m$ J y4 C
K2 R4 f( V# B' y; U+ u# G ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
$ i. j# J4 g# c9 P( g8 B* M, L6 F( ~ B
if( m_lpCandList )8 |- H8 ?* m" m5 K7 m' ~: V8 J
{5 J( E& T" }% j5 @ K
delete m_lpCandList;
0 h8 F3 T' h5 |" Z6 J1 } i% I7 T m_lpCandList = NULL;! L. }* s4 \. z) o$ ~* D
}
; A; L! o5 k% ^- b
( G% c i7 r& K" Y. D A* l if( GetKeyboardLayout(0)==0 )
' V4 Q* [' y3 r4 H/ a; W {
/ Z( a4 `6 {$ R3 ^# A2 ]" L return FALSE;& @& S, k* f# T# W# j9 C4 ^
}
* m( [% T, f/ I# b" a5 y
; N6 F8 H3 H" C- S hIMC = ImmGetContext(hWnd); //取得输入上下文0 _3 U' ?1 V- B# W& ]! b/ t( A% S
if(hIMC == NULL)
. i, k' E9 q7 n, U: V, i {
. @. ?$ g2 B) w7 Q: r6 ]2 O return FALSE;
# a) R/ H3 A4 Z" k }
' Y! F [+ A j4 E, h
, o9 ~# ]5 }7 a3 ^4 K8 ]8 o ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );8 T' u: t/ S% n+ n& ^
if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) 5 R2 E2 A2 u$ K1 L6 A& q
{, ]7 R0 v( M$ W0 P. N2 P
m_lpCandList = (LPCANDIDATELIST)new char[dwSize]; & r9 Z7 m% K" w, h0 g$ Z' d
if(m_lpCandList)
( K2 U' @% h U* a4 j, [( ?3 m {0 w# n+ ^4 m& d. y
ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
: s) M7 B y+ O CandidateToString(m_lpCandList);
( j2 R' K# h* E# ^' n* S }+ ]0 y" u. z2 {8 Z6 G$ I. F: A
} 3 p, u; x! R6 v9 P6 h
& x j) I" i9 s/ V8 ^ `
ImmReleaseContext(hWnd,hIMC);
0 j. s6 G5 q# g( o; h! s; d( T8 `( D
return TRUE;
( R1 H/ p* F; t}
- q' ^# g; a, v5 t3 W
# w2 T9 x4 ] c9 X0 Z: X2 Ovoid CIM::ClearCandidateList()4 [3 I2 r2 S( [' J$ r
{, P5 X% n3 _: [( c' ^2 F' M9 I
if(m_lpCandList). d- U' c/ t c
{2 g1 I# b3 b7 C1 D
delete m_lpCandList;% X& g6 v8 F# V
m_lpCandList = NULL;5 t9 ]6 J1 V0 Q* n& o1 p5 X
}
7 m- P+ J+ v9 [ ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );
* g, z5 A. M T: ] D( s# \* w2 A}6 p1 l6 C8 s/ C9 I# T! s& M
* B, u4 w, p4 f. F
( c5 X5 G* x2 {) _2 hLPSTR CIM::GetCurInputLanguageDesc()
+ x/ K% B( e; E9 V* ^! S{, p6 C8 k0 Z0 R5 {
HKL hKL = GetKeyboardLayout(0);
- ?7 G% v# i2 J& ?- n, r4 ^) Q
. X+ p# q+ L9 W, a$ Q5 u0 J6 Q if( m_lpszCurInputLanguageDesc != NULL )
: M0 W) V. G( ]1 q2 i+ ~ CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^7 f- A4 f; u; ~8 H: z6 l% B
0 ~$ g+ h: e) `6 S g1 }; q& p) c int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
. p6 p1 W, J2 }
/ C; i2 e' T, u. V CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
, G# a! X6 w+ y* j" ~+ C/ g6 D; U/ y( W; A) l0 w) ~7 k
if( lengh )
( |7 k) N+ Q; Q) F! q6 L {
1 `& G" w' a4 M4 s! R ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
! j b& y0 I* @9 q; M }
. n, K0 O8 u4 t) G) `, H' u else2 h" D. {% b( `4 l
{
6 h# R6 |3 q( j0 h9 A& `5 y strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" ); c8 @/ W: {! k8 K. J
}
" m4 z+ @9 v$ h# j5 x$ g8 }5 W: [, \: m0 Q/ H3 a0 v8 J
return m_lpszCurInputLanguageDesc;
* Y$ i; U2 v5 Z( x* t" H6 V9 c! {}5 c5 z6 L7 M$ {) P8 ~
/ r4 J# L9 \: l6 w( S
void CIM::UpdateShow()
, R# |. B3 w6 v' V8 q* j3 ], g: B{7 \3 X; k* w) @ |9 Q$ F! G: P. k
POINT pt;
2 d; q, \% V+ U7 r! Z& J" ^ pt.y = 450;" s# X% Q% U- Y0 }" o( d) s4 X- @
pt.x = 400; + _: v; E4 g+ N+ G6 k
ttffont.SetSurface( DD_GetBackScreen() );
' a8 I8 [! V& a* g2 R1 w* r, c ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述5 W& y( y& `& G4 s, `3 E
' |7 ?. c+ G2 ^& j+ b pt.y = 420;
4 X% b: ?$ Q: [ pt.x = 20;
/ M1 h" A8 v. z5 X. Y, E- _ ttffont.ShowText( m_cCandidateList,&pt );
, z# I. e: _$ m1 k- |8 C: j s+ V
pt.y = 450;
( W* a/ Q" r3 f( W pt.x = 20;
% b* ~7 \$ ^+ f. D! z0 `4 `" a9 J if( *m_lpszImeInput == '\0' )% X& b) B; S5 z8 b C0 B# f8 {
return;
y0 M2 X# Z$ g; ~4 T: m7 w6 c
. v! _. J a+ e/ {! s, o ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
9 L8 c* R8 a( O}7 Y* T" ^$ I& X M0 f( e1 {6 l! B W
' s5 ^; g. O! B" u
LPSTR CIM::GetResultString(): Z, C8 x0 I9 V/ j
{" ~0 I6 w# w$ ~* j) j5 c
return m_lpszImeInput;
: s" S0 o" P' m% ], [; q4 A; l}$ M, D0 O$ I" [/ x
5 H% Z' |' k8 m
BOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList): H5 N6 N+ [. R# h
{
7 L7 ?+ H/ I6 P, R a if( !m_lpCandList )
; V' }; `6 _5 i, n- r; } return FALSE;' j. n, K7 T, h( j, H
9 [# z/ r7 N4 C- m& C# E/ B, ^4 e9 a if( m_lpCandList->dwCount>0 )
1 Q3 v* K# p, v/ Y1 j {' I% F+ p9 U: |( f) O9 c
LPDWORD lpdwOffset;
& h' I" O5 _8 i# j% L, n
5 j* F( G+ m+ B: g0 ^ lpdwOffset = &m_lpCandList->dwOffset[0];
6 ?3 ^8 z% l: I1 T/ [; l/ q% {5 o/ D5 t/ {1 o G$ [
lpdwOffset += m_lpCandList->dwPageStart;
- t& C) I- `& P6 J% t# C3 o6 {
# l2 f/ r' w5 @ y6 E% t3 ], f ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );0 D8 n. z9 [/ {' x) m/ D
. M: d7 A3 v( P5 p0 m7 r* k: [ Q
DWORD z=1;
# V! q9 u$ I: m( S for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) 2 x7 ~. T4 G9 x `! M
{
+ l- G, n$ \' Q9 j0 c! L LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;% \; g7 G& U8 I0 w& z7 p
char buf[255];- n: D j$ K& ~8 q' I% W3 `/ d( C
sprintf( buf,"%d.%s",z,lpstr );2 m; }+ }1 x. ^3 \- G. Y' J% C
strcat( m_cCandidateList,buf );8 T7 F% Y6 b0 j) T, Y" o& w% z
z++;
$ ^& r% b6 K: ]% g" z$ o; v5 c) C }
6 \; S# r8 @- H1 x
5 o/ D" r# S& f; R9 y return TRUE;
7 f) k! K( s' a% p! n/ u' ? }
: f9 v7 w' c* A H2 P7 H0 j
1 H6 @9 M/ y& s: u return FALSE;
; A/ x: Z. u' A' t/ C}' y$ ~' F5 l' i" R# K! ? p
1 b& ]8 Z; x0 GBOOL CIM::ImeIsOpen()
4 N3 h$ @5 S5 n5 Z* H- q{+ o% |! E, l) u
return ImmIsIME( GetKeyboardLayout(0) );
1 o+ F) t/ k1 k0 m; Y; r} |
|