|
//******************************************************************//9 M0 I a" V' M) ^- O
//
. Q+ Q. E$ L/ h2 ?+ @* I// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
: e# H' d6 }+ b// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
: @/ u7 N6 e F& X3 c// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
; W8 I- P0 g" G3 V" a! k7 `4 F; C// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT& @, {7 T( o9 d `4 {
// 为显示信息用,可以用其他方法替换如 TxtOut() 等2 K! F }# y9 \" @6 [( w6 u! N/ u
//
8 Y" u f3 S% u2 i4 Q( D//******************************************************************//+ p$ v6 X5 {2 _. Q
# j# l/ a* P" N
//////////////////////////////////////////////////////////////////////4 s* A5 T$ S9 w) W$ v5 d M
// G4 y/ v k/ ?5 F$ }
// IM.h: CIM class (使用系统)输入法类
9 @6 R! f( G- V' e# D( f- e/ K// 2001/4/30 Write by Jerry Wang
; Y0 U9 p% u. F* X" T- s// 感谢大大鱼的帮助6 H1 |: r- }5 h. n$ Y0 R
// Need Lib: imm32.lib) w0 T4 a$ v" j Q- b' S( V
//6 l3 b' m [, k0 A! q, \
//////////////////////////////////////////////////////////////////////
+ z: w* J- ?% s: ]! ^" F2 {3 B9 e8 S; P/ ^" T+ r+ M2 [2 `
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
, {. r! z* X2 b, Y#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_' I! \( \- ]7 _- Y) H M
( q+ J, c8 W2 P6 p0 g$ d- J3 Z
#if _MSC_VER > 1000
$ I) W r$ K3 D( {#pragma once
4 d& X$ @. b+ H+ s#endif // _MSC_VER > 10000 a+ ~, x: d( J6 w2 q. X
9 L4 Y, v( c* n+ {' \& ~ v#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数# y! O( \. Q0 W& l" W
4 |, R: ^& h- y- b0 F, L* a! Q/ p#include "FindMe.h") S6 N) h. a V* V/ c4 \2 K
/ v5 L6 i6 A9 }9 p7 ?class CIM
2 Z- ?9 B9 Q( _4 v5 s" W- R{+ _0 G5 ?4 ^7 L
private:# c% s4 q) ?: [+ U2 N/ A) h
CTTFFont ttffont; //显示信息% i; f9 z$ B' `4 I
LPCANDIDATELIST m_lpCandList; //输入法候选文字列表) h; c: n3 c }: A
LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针
0 a, j7 a4 p0 l8 m LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针
# _8 a6 Q% q9 M/ r7 V4 b char m_cCandidateList[255]; //候选文字列表缓冲区* B" @8 e; h" g7 e
char m_cInput[64]; //输入的字母) L" \" F- g! F. v
6 s9 {( X9 s6 o/ Y* a5 ^( z BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串
% z0 l7 \! _3 p' J: n3 a! T; Q" J/ | p% [$ ?9 g
public:8 \& J) b" V; J7 P- ^7 ~
7 l2 j, ^/ H( P
CIM();
" D! T. Q& w; K2 c virtual ~CIM();
- j* D$ p. o. p# \
1 n8 y& y r( d- O LPSTR GetResultString( void ); //取得输入的字符串 ]1 Q9 K+ J# l* l$ W" s9 [3 P7 m
$ \7 b/ J$ ?; J; h
void UpdateShow( ); //显示输入法信息5 q( T: ~3 p% U
1 K7 u( k t9 p9 {, O8 I8 ^4 ~: b
LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述
9 @# l6 f# y1 _0 E, I5 l9 O void ClearCandidateList( void ); //清除输入法文字候选列表* Z4 a, D8 Y5 m0 {
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表, ?' T r4 v, S8 C
BOOL ImeIsOpen( void ); //输入法是否打开
4 @# I; K! N( r- H+ E3 [ void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
1 ~" L5 L% x: T |; e# @# n; p( R) Q4 j void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
2 _) u* y" e1 P9 K5 X; f void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
1 H% {" y8 U0 ~) H5 X$ S1 L};
, ]7 H! R* v7 }; b1 a: ^! z" y% W3 j' }3 b0 ^ S8 g7 h
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
2 }$ O. T& w% t' H* P) P# a
, j! E! t W# e( Y6 b1 ~6 W7 z3 }8 r1 R
, b! G! p b R/ r" z
//*********************************************************************************************//
0 o% L/ }! H0 a9 ] U) R
+ O8 y4 J/ ]6 ^5 d7 [//////////////////////////////////////////////////////////////////////
2 s( {- ?9 D+ U+ s- d# V& I6 C//7 N( u, A+ y p
// IM.cpp: CIM class (使用系统)输入法类
( Z0 `& S( X a( I' ^// 2001/4/30 Write by Jerry Wang4 z& {8 W, W- Q0 Z7 P$ z5 O/ ^
// 感谢大大鱼的帮助
6 o% l" S9 ?: @. W! j// Need Lib: imm32.lib
$ ~$ ~# Y4 X; H# f8 V0 H5 O//
5 j/ y" z; G1 o# m; Q) U \# q0 y//////////////////////////////////////////////////////////////////////
0 s8 ~: U/ R! H$ e2 v& E
) K( ?6 _/ S( x, u$ X/ E9 b. S3 Y- F#include "imm.h"3 ^; y; K- x% S7 n4 x
% G8 u+ t: w0 e0 n: ] p//////////////////////////////////////////////////////////////////////
( k- h6 `# w% D+ b6 X6 g8 ^/ x// Construction/Destruction& _- e; N# J7 Q% W V
//////////////////////////////////////////////////////////////////////1 C" w5 e3 i0 t( U+ L( U
$ ~8 _' N. Y; G. oCIM::CIM()
. i7 }2 q7 X0 [: G) K2 [{
: F) e$ s" Z. N3 X3 C m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
. v8 U) C5 J: a ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );8 h; f) R% s7 t$ v7 W, v5 v
*m_lpszImeInput = '\0';
2 k- q& b0 O& d D7 V/ r; y5 R *m_cInput = '\0';+ a+ _$ L6 D, h! `: M
4 s6 |$ J+ b& Z) S0 q' o3 t ttffont.Create( "黑体",15,RGB(255,255,255) );
# Y. z7 b1 A; T! g# E GetCurInputLanguageDesc();0 _( I9 X' b4 u. `) O- y
}
b `, V ~' ], L
( s8 O( L: s. f( P. d( D( h+ k; FCIM::~CIM()* P- @! |" s% S1 ^1 o
{
: Z4 }2 ?/ {: z: n. L0 _ ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
8 n, {% t- ]/ i8 e& G
$ C1 ]7 y" x+ `' ~4 w CHKB( delete m_lpszImeInput ); / P' ~% Y q: m7 b
if( m_lpszCurInputLanguageDesc != NULL )
b9 ~& X0 k5 x% T8 C# X) N CHKB( delete m_lpszCurInputLanguageDesc );
- @7 G- W. W2 h. ] V) _, Z}1 I$ e# t. W0 K) b9 P
# w7 q: v2 N6 t7 ?# F* Q1 hvoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam)3 O* W- P" z4 r/ r
{
, z1 a) @2 _5 n0 A0 i& C1 c if (lParam & GCS_RESULTSTR)
. |6 A2 Y" ]- z {( R0 k" T1 X. d8 R% e
HIMC hIMC; //输入设备上下文( u) o5 {+ x! `- m! a4 ~
DWORD dwLen;
+ b7 P, U% X1 i2 [5 L. h+ R- s LPSTR lpResultStr;
$ l: y) m8 s. H$ z
, Y6 A- T" H' [+ y hIMC = ImmGetContext(hWnd); //取得输入上下文! r, @. j$ [4 {
7 W5 C. B% }6 J* | if (!hIMC)
- w ]4 m! H1 s return;3 [; N9 v6 s1 m" F/ W
( m' c' J3 E m, |( G7 k8 P dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);6 }. l. B" G. Z
dwLen+=1;
6 L L7 h0 n/ p5 Y: C
) S& G8 {" v% u- @/ q) o5 {* U& z if(dwLen)
& {& j* O6 f& J4 X" G8 q9 I {" U; a* ~6 z1 x! S! v' M' Y8 |
lpResultStr = new char[ dwLen ];' \- }7 v+ N6 e' e. ~8 a
% z! G/ k$ w( C; W. _; i9 V //// 缓冲区已经满了' y6 d! v% x/ W$ V& p6 a% M5 V1 @. _
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )
/ g7 i3 n9 h; a; n. e K {
4 e& U2 P' j" { k7 g6 A MessageBeep( 0 );
: I4 {/ y* D$ x$ E: @ return;8 K& n/ \. A9 F8 g! K
}1 b% U1 w+ ^2 `
ZeroMemory( lpResultStr ,dwLen ); 6 ` P- ]! f3 x8 S: \, t# x
if (lpResultStr)+ g( L7 F' k5 i9 m5 A. f
{$ _% J G L1 q& J
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
8 B) f( F" Z% _8 E strcat( m_lpszImeInput,lpResultStr );
* \4 K6 P4 [; Y2 ?2 f4 Z }
! r+ z& J! p) g& U3 ~ delete lpResultStr;
' B6 g1 z/ m# F4 _' O/ h }7 J& t- F& o D; l4 b
, I( x" j8 Y2 q8 W
ImmReleaseContext(hWnd,hIMC); //释放输入上下文
! Z+ l; D3 y" P/ ~ }
- P6 t- d* H4 D9 ^, V/ x0 G. ^4 ?: a3 c2 x# d
}
9 t: T }6 ~6 b# V" M: y' N$ Q/ ~1 c/ A8 `7 [4 W
void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
2 k# ^* Q0 _2 M6 W5 i$ J{
- _8 s0 P0 {* \6 G. | DWORD dwCommand = (DWORD) wParam;5 C( [" \+ R% n$ X0 F
switch( dwCommand )
& t3 Q; h" N# m+ z# o% O {
+ J8 h7 T: I' K! n" r: V5 Y: _: Z case IMN_CHANGECANDIDATE:# h2 `1 b8 C7 s! o" Z
GetCandidateList( hWnd );
$ M/ I! j9 E3 s2 W/ l. x break;
$ {- E% A$ a0 d9 F0 l7 r2 K8 o1 L6 _' W9 |
case IMN_CLOSECANDIDATE:
: d2 w% ~+ {' H, L* u6 P ClearCandidateList();, R) w: ?. r4 H- g. y
break;4 ^) i, f1 }7 X; o3 _
8 e0 F( b& m# [7 _' L+ J case IMN_OPENCANDIDATE:
: h2 P# f4 Y$ x' v4 H1 H GetCandidateList( hWnd );
) b/ `' T E$ A* S# y break;4 B0 }/ W4 S5 `) @
}
6 X' t* S5 g; s( J}/ q4 K6 D5 J- l* y8 r
5 l6 M1 }. l8 \6 m4 l A9 Avoid CIM::OnChar( TCHAR ch ): `6 v- l; R( w1 t$ V
{
. |; A; l: G9 Z7 w5 [- n9 ? int len = strlen( m_lpszImeInput );. ?2 O& q( B- B# e! ~% e5 S
. ^1 h( R% A7 m+ ? if( ImeIsOpen() ) //输入法打开状态
5 C& a9 W3 G+ k- Q E2 k6 f {
; _. U! A, c0 Z5 N4 F0 }
- l* @6 Y, E, m$ A7 J, x }
' v% M( [, r& j else //输入法关闭状态
6 G3 M; {5 c' u& d$ C { t/ W0 i) N6 W+ c: r7 @
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母7 B. L# Q. p4 K# B- \% _) l6 r
{* i" j, {% ]" ^* ^& c5 O+ _# A o
*( m_lpszImeInput + len ) = ch;# Q( N1 `$ D3 {- s" m4 h
*( m_lpszImeInput + len + 1) = '\0';2 [# a9 }& J5 z5 j* g+ Z1 K
}, b) w" {& f5 Q0 a" M8 e4 _- v, j
}8 J- @3 W" z8 r3 w' b( `' Q
E2 W9 S* A3 s) e
if( ch == 8 ) //BackSpace字符3 ], b/ s9 ~# A3 G$ H* v
{
G; R5 O9 N% V8 U6 F5 h% S' ] if( len == 0 ) //字符串长度为零
9 `4 i1 _; r- o H return;
" n+ B6 Z. A2 O, T4 p. j& \" A+ h0 @( ^* i9 P. `& y4 U- E5 T, K
if( len == 1 ) //只有一个字符
& r- D* }9 y4 h) Q {
- j. ^( @7 M4 }, E *m_lpszImeInput = '\0';
& A" v$ p% I# X return;" A; ]- K9 N0 m( K
}
0 l, d! x" B! b; B
( C( Z) I5 y5 W" _4 h, @ BYTE cc1,cc2;2 D( X' H% @- [3 _; o6 O% i+ N% t+ U* ~
cc1 = *(m_lpszImeInput + len -1); //分离字节
5 s' J, Q. S6 A% v- X9 d6 B+ @# m9 q- B# O. G cc2 = *(m_lpszImeInput + len -2);- e! V2 i P: k7 z; P6 W% X: N5 d
( m6 \7 ]1 R- w# X9 U4 J! P$ u if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
5 i7 ?2 m0 z0 n! {9 C *( m_lpszImeInput + len -2 ) = '\0';
: B0 ~' i$ ]- G$ B, ` else //是英文字符(单字节)
; I a3 d G- p [" l9 e: O *( m_lpszImeInput + len -1 ) = '\0';: M6 ?, \6 J. Z# h1 C9 z- _$ G- L
}4 A# N6 ?( p3 z# ]& ~
}+ [+ Y5 Q2 @5 E9 ?, q0 F
6 a' T# K9 Z: {4 h" U
BOOL CIM::GetCandidateList(HWND hWnd)
# j$ _3 ~' _9 ^7 Z. |- ^{0 ]+ n& m. B x8 [0 z/ w) h* N. t1 F
DWORD dwSize;
6 O" o$ @% P, L. S% M' | HIMC hIMC;
+ [2 v3 j- n! _) d! {4 h6 X8 ^1 A7 ?
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
3 O& s9 V" X1 g: l
2 g9 c, l8 g( u4 P if( m_lpCandList )
4 }6 x4 R' M( j/ G1 e {
$ q+ J" I/ W# \8 { delete m_lpCandList;) Q& F% B: \8 [7 ]: l
m_lpCandList = NULL;8 ]) @& o2 T$ B. P6 R
}
% w; s( _( Q3 r9 C, a. y" u6 K) o3 C3 ^ b/ @
if( GetKeyboardLayout(0)==0 )
/ S) h5 `6 o2 T" q( _ {
2 K+ x8 i y4 V- L0 |" f5 R. R return FALSE;
9 g' @* S: J* C* h. U1 W9 q }
, n% V& ]7 y. D9 m. B1 y: M+ d3 u! b" x6 e& B b
hIMC = ImmGetContext(hWnd); //取得输入上下文/ ]1 v9 \, D" L2 a7 X; j1 o6 t$ N
if(hIMC == NULL)
9 @5 z9 R7 K; F7 b9 O {
; `; w" @. |" Z" G2 l2 \* n$ z return FALSE;
: N. j2 l4 D! @3 b7 B+ L) ^1 T }& C3 K( T. p7 M: e1 {8 X4 E4 ?- X
9 K" l9 U5 }( x- I- N
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );% f; r1 h! q& _ y3 v
if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) # \- f+ S% \- t5 C
{% r( W1 \+ h* P- h9 ^; u
m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
& F q U/ D: O0 h2 k if(m_lpCandList): R+ D: O* f* Z+ J1 o
{
! ~) [ {: |$ i, i7 ]& e ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
E; L! t+ E9 N) V' [2 D- W* K CandidateToString(m_lpCandList);
( t7 s/ M! B$ i8 g }
/ H8 F) y8 m5 S, u7 S, H0 t% ] }
$ j4 g( j; C0 F
6 l' }9 l$ M* C9 } ImmReleaseContext(hWnd,hIMC);
! ~8 q# l( d g# \# A( a2 H. h- X9 ? l6 R3 g6 c; w
return TRUE;2 y; V6 k0 X8 ]" ?3 Z4 c+ ~
}
( X" g6 t0 Q/ [: y0 ?
+ W7 C. f8 x1 Y) j- W% }void CIM::ClearCandidateList(), Z4 R2 m- L8 [5 n5 ?$ E
{
5 U0 Y; a" }: F( b( G. r( N& J if(m_lpCandList)
6 ?! T2 P- L; [- g3 d( i {
$ F7 s% H: n, b delete m_lpCandList;+ ]. o% F1 z% I- B$ I; r1 w
m_lpCandList = NULL;
2 O: q6 n r2 a& ]! Y; _- L) C5 Q% n, j }
# @2 ]. H2 N0 H |/ V2 k1 I; B ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );
% K9 |, M: e+ r+ w, ]8 U* c2 S, t}
+ i, j: `/ \9 Z- d* x+ g+ E* `: i% R8 r' i; U% G1 Y0 m
' L% H j* V2 }& w" NLPSTR CIM::GetCurInputLanguageDesc()
; S0 I! n% \/ z; _) V( v/ \6 y{
! O, D: e4 H1 |6 P+ y HKL hKL = GetKeyboardLayout(0); ! w6 T/ ^3 u9 y
/ R' n5 @- P+ g* t: l) z# m
if( m_lpszCurInputLanguageDesc != NULL )
% {7 j0 N% a& N; g% c# x" W3 L6 _' } CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^
" C% C) V+ @* R$ U) x8 K! f# C( ^' j8 _' y0 e
int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
$ ]* L6 U& a. v2 Z% }6 m9 ?8 N: E7 N1 f4 C# `7 }
CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
} n- X6 D- B. |& Z0 V& p
1 m/ T5 n1 a7 D+ u6 a1 d0 p if( lengh )
) ]' m+ M, o) R0 k" e4 j. | {$ F- W2 R$ r2 H; u2 D: P, U c
ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
0 u$ O) S6 }, X) k+ k4 Q }' n3 O3 D* d" `# @. f% a
else
9 d" q7 X' S' K( t' k {# e: {: R% A7 r
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );" ^' @/ Z. m( K$ t8 k" k( o
}6 l P' n# @, n2 M; O
! ?" P+ M9 E- l8 I% @" w1 ?" Z return m_lpszCurInputLanguageDesc;
. T- C4 R" t1 B; J}
7 p% n5 A: r. A$ t3 T
& g) D0 r' u# K$ N# Yvoid CIM::UpdateShow()
' m9 y$ ?8 T, s- _5 e6 Y, g{' \ ?3 C/ P, Q% C' t
POINT pt;8 `; }4 q& z/ c# U) v
pt.y = 450; s. I, x( x: c3 {7 m
pt.x = 400;
7 ?& s' h" w, J' c& P: V ttffont.SetSurface( DD_GetBackScreen() );
. y/ l% E" ?( |0 Z/ o ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述
6 ?& X, H; P! ?* U
: @+ K9 F4 Y9 b) Y% o pt.y = 420;
5 s4 Q1 t1 x6 W& b3 \ i$ u5 K pt.x = 20;
7 E' U, ?0 L" L9 n* X4 c+ E ttffont.ShowText( m_cCandidateList,&pt );
& q# ]8 l* y' J) R1 R, f
; w6 c( i* Z2 F. b pt.y = 450;# A$ P) J. E- }" ~, c" y/ k5 c
pt.x = 20;) S& x* ~+ C5 ?5 G
if( *m_lpszImeInput == '\0' )
5 Y* r% X! L; @ return;
7 G) e1 \9 ? Y. m! j# ^, H% R( |. d. N; w0 u
ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
* ] h+ H( L. a0 W9 r9 G}
: A, d# I5 J+ ?1 r" ?9 y; K+ f0 q6 Y$ A& M
LPSTR CIM::GetResultString(); W+ i: Y/ b( Z9 C( f; j
{
+ F% U$ _: G# U+ @- M return m_lpszImeInput;
* z( ], r: \/ f, i' J# Y: E: v9 ^}
& ^! |$ ?9 i: ~" h _0 S' z% r6 T- B) M9 \/ J) Z; z( p9 F
BOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)
6 C6 R) G( \* y8 b- v4 {; o{
5 k% Q) i; C4 d! E if( !m_lpCandList )
" Y! S! o4 @, n' |5 h$ w return FALSE;
& |+ c _# h k# ~7 a8 e/ d8 I" r' v* R
if( m_lpCandList->dwCount>0 )2 A2 n; {$ ^9 S( n2 {' T' m3 F
{
7 w& _0 K: l$ B8 g: V LPDWORD lpdwOffset;
$ x: W& c3 i t0 m0 w% v: O
2 {# D5 S' ^) O! ? lpdwOffset = &m_lpCandList->dwOffset[0];; ?/ ^4 c0 X$ W/ P: ] r( C* E
6 S' Q" M+ I Q, h3 n lpdwOffset += m_lpCandList->dwPageStart;
3 R: E5 |+ M* l; F6 S' h7 p4 \" m0 b+ [
ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );/ R$ n4 A& y8 I2 K& P: q
# K+ d, t k" i DWORD z=1;
$ V* D( `; ~3 L* r for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++)
- u1 p/ j0 Q$ a; R% L4 O2 W { 9 j+ t* _8 z$ x" y5 m1 K
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;
V( k) X3 Z/ c# [ char buf[255];# A* l' r* Y. k6 v2 f7 A
sprintf( buf,"%d.%s",z,lpstr );! n- T2 e$ V# L
strcat( m_cCandidateList,buf );
* O3 u8 b' a9 G9 D- z8 X z++;- {) [. `1 s$ S& e
}
$ `% ~* ]$ A, {) @; Y7 p! ]
3 F0 h1 a2 @! [# }# f return TRUE;
9 U/ `+ {6 {& Z: ]5 d1 I9 e }
4 ?) f; |. w2 l. g! y9 ?! @
& y2 P- p P( m return FALSE;, H% u4 W' |' N( [/ r
}
/ P1 J3 v' B" w- T; n: T- ?# b5 W( n: N' a. }) B/ O
BOOL CIM::ImeIsOpen()
3 H# [) V0 j+ d, y{
. \7 s4 T( ?& e" v return ImmIsIME( GetKeyboardLayout(0) );# ~0 w1 W }5 a# y% e
} |
|