|
|
//******************************************************************//; V5 B5 p) c! G) E/ U1 K( P
//& Y7 n# O1 d9 ~/ Z
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
7 K* {0 |( j$ a// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
C6 F- ^9 H' {. |4 D3 K/ Z// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net+ @, e5 f/ v i) b- d& i# z. W
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT# o! M) x4 ?+ p" H% F
// 为显示信息用,可以用其他方法替换如 TxtOut() 等$ {3 u& ]- j0 R& x$ e
//. x& c0 V. p$ G/ m" w& t
//******************************************************************/// c$ ^6 X+ Q. Y: A6 M3 [
+ V4 j$ R, j: E//////////////////////////////////////////////////////////////////////
) d% m1 Y( F. B ~/ y3 `//
3 G. Q% q2 t- a/ n// IM.h: CIM class (使用系统)输入法类, e) _5 P: R0 b% } B
// 2001/4/30 Write by Jerry Wang
4 W o" D! @, ^+ x& B// 感谢大大鱼的帮助& F6 y; g* Q X) C1 z7 Z( A2 u, D+ P
// Need Lib: imm32.lib* f9 N) L& C( S3 A
//+ [" Q2 \' \: l3 h
//////////////////////////////////////////////////////////////////////
/ F8 T& e( [- x# |
, C% i, m# U/ c& x1 J#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
. Z8 c9 z# I) p# n5 r- P& p0 ]#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_
# \2 T3 R2 c2 M/ ?8 @1 J o& K. [ q6 s" B6 _6 g, P: J" z
#if _MSC_VER > 1000
2 E$ t& p E7 `! ]#pragma once
0 v9 B2 l$ y5 J7 S" Z Q% z#endif // _MSC_VER > 10006 a( [5 y2 `. Y( j) ^6 O$ \& ~" H
- h+ A7 |% z5 d4 A Y& m, g#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数 I3 D0 |! E3 ]# j2 B, q
9 @6 R; I: c3 X; Q) R4 Z# A8 W* x#include "FindMe.h", k! a+ E+ P5 M4 U: b
0 S! K3 Q+ f8 q0 Eclass CIM * w9 Z2 X8 J0 Y& w
{
0 z5 _" u% k0 x6 g& N$ pprivate:8 u1 L+ d" U3 j: ?: w
CTTFFont ttffont; //显示信息
) H! M0 V# ?2 v$ m" G/ ` LPCANDIDATELIST m_lpCandList; //输入法候选文字列表
2 h6 Q+ ?8 q/ D- u LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针# m! X2 _) J6 K* n: t0 X% s
LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针
0 f/ [, Y- ]3 x" U! n; G: ? char m_cCandidateList[255]; //候选文字列表缓冲区
( b( I I, B8 p+ T! p* `: _ char m_cInput[64]; //输入的字母
8 |7 h7 O* y7 w) L" ]/ @& U6 b( P5 x* c
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串. I: G f- f# |- |
# s r" b$ @1 j4 \) M0 c( Opublic:9 X* x h1 t- F' t1 o W5 w$ ]
3 A8 s; k$ m" P; r/ |% k7 w: I CIM();2 L( @1 l! T2 Z
virtual ~CIM();" d9 S# K& ?9 j0 |) a5 y# c
2 ?2 N8 [' V# S# u& } LPSTR GetResultString( void ); //取得输入的字符串8 }- i j$ {1 u& R/ O+ I
4 ]: j% A6 P5 i# L3 V void UpdateShow( ); //显示输入法信息
8 U$ n$ c) j6 {, @- ^7 O8 j8 S( x7 y. ?% u% F0 y1 d
LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述8 f! e: n# y3 o8 @ J! L" j' ~& d4 V
void ClearCandidateList( void ); //清除输入法文字候选列表8 c" `2 L# W0 E" r' c: I7 L
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表# d$ c" {0 ~* _: O, n3 M
BOOL ImeIsOpen( void ); //输入法是否打开
: Y8 Y! D' Q2 }0 @% q' w8 O! ? void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
) y% D' t3 t, j, ?; W+ s* { void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
5 T; e7 [$ E" b, K# @8 k5 ?. C void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
7 k9 }* Z* x! Q) ~( D$ d};/ W7 o- T$ ]7 a0 l+ _
" I) x$ ]8 G+ x3 N: O
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)1 `1 i, ~3 f) V% d6 s) j- P4 V% v
" g2 ~$ {7 f; r0 U1 `
* h! ~- s+ q% z
& k4 R) G* k5 g//*********************************************************************************************//
8 t y" ~- M4 t3 w
9 g% @, q+ K/ F* Y8 | W//////////////////////////////////////////////////////////////////////2 p4 r" Q6 W& Z# F
//
2 i3 [/ _9 I( C' U {) B% w// IM.cpp: CIM class (使用系统)输入法类( Y; s7 f) H( ?: b" m" {
// 2001/4/30 Write by Jerry Wang0 X/ }6 U3 B0 {! G8 Z& l
// 感谢大大鱼的帮助
) M' j6 ` ]0 u d) T1 l// Need Lib: imm32.lib. B! _: j$ t# f8 U) {& u
//
& a0 a+ k- b) u; o/ y: ^. L//////////////////////////////////////////////////////////////////////' ~9 \+ U% B- [& X u3 j3 f1 D
% c) g h* a9 h
#include "imm.h"
4 P: Z- W0 n3 B
& |& l `' i$ \//////////////////////////////////////////////////////////////////////4 f$ U* O1 F' i- D# H/ U. ^
// Construction/Destruction# `1 \6 u Q( p8 v. A ]# F
//////////////////////////////////////////////////////////////////////
4 Y( o! C( G1 m* `7 n4 J- o7 L% |& ?- N1 i4 Q: O" @" p
CIM::CIM()" g# V( J4 x5 @# c
{4 l6 N0 l8 ~, r) {
m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];: y. y8 g! o. e8 X3 d- Y5 @8 d) ] ~
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );8 h T( E' o: i. l4 t& i& K
*m_lpszImeInput = '\0';" |/ C% ~4 \( e" y/ N; R
*m_cInput = '\0';4 E6 h; ] z3 X5 q
9 S) t9 v: l. L7 X# h ttffont.Create( "黑体",15,RGB(255,255,255) );' H v4 ~! C9 a6 Q* Q6 s
GetCurInputLanguageDesc();
) W& R$ k; y- S" a( U$ M}* j- c7 T6 x$ b1 @
/ z& S3 D" {9 v. T, `+ @* FCIM::~CIM()" A1 M! D0 D7 x. Z. I7 a
{
9 z) Y) c8 k# C* f" g ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
, M X5 u1 u' n5 G3 x8 n* Q
+ w4 T- b3 e, p Q# u, O0 d2 H CHKB( delete m_lpszImeInput );
], B+ F) h0 |0 e7 F2 b if( m_lpszCurInputLanguageDesc != NULL )* }3 O) P: M0 X/ u3 a
CHKB( delete m_lpszCurInputLanguageDesc ); 3 j4 B, }) k+ Q3 }# c8 _
}
# n, ^% P D/ A8 W8 k* i: m: v* x8 z6 R8 Y6 X# |3 p
void CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
6 `4 r+ ^) D3 F- Z9 x7 F, |{5 e5 F- m2 i) Z3 y
if (lParam & GCS_RESULTSTR)
9 u* D; c* Z& n' }' _2 s9 T {
+ A2 {7 j# U! e& x HIMC hIMC; //输入设备上下文. }* a' \2 k- B2 M' M
DWORD dwLen;1 X; }5 c% r) P* N) k
LPSTR lpResultStr;
& j+ w% U) o& l2 b0 e" [% o# G/ J1 d7 d G+ s
hIMC = ImmGetContext(hWnd); //取得输入上下文2 O6 V# y f, A' J! q
" `5 y- |- C: z' _/ D1 d5 P9 E* o
if (!hIMC)
5 E3 m1 N! `) P7 V3 t( s return;1 g! b8 J: G0 A: Y8 D
4 }1 b2 W- D# x1 e3 o dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);2 [2 u' i9 |" C0 J, {! Q8 ]) J
dwLen+=1;
% g, U( {: L2 {$ h9 R3 T
, }) C4 r& ^) i6 I if(dwLen)
* o( f" J J0 q# f {; A) K6 L, c2 k( t5 [
lpResultStr = new char[ dwLen ];/ U4 n+ p0 O( t0 E' j
2 j* _! C) N' ~8 H% C( x' E" X1 k
//// 缓冲区已经满了' Z& b5 w- q3 c, z( d
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )
1 q6 K5 ^' V( ? T* W5 D {
4 A- w" O# u" Z MessageBeep( 0 );
& m5 l0 V) ]- l2 q6 P return;0 H7 O( l, R r9 Q0 N$ V* ~
}
2 v9 e8 }- L4 K# P! P6 ?2 \& q ZeroMemory( lpResultStr ,dwLen );
( } I7 W) L9 B1 A4 N9 Q: z, P if (lpResultStr)% ~5 T$ E" E8 ]1 Z. K. d2 }
{% U+ V0 q |7 d2 s) j4 H* S8 [
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
7 r7 X% P0 x0 R0 R5 g4 _! @ strcat( m_lpszImeInput,lpResultStr );
1 X: q9 Y2 P! T& v3 h: k }: C6 u2 ~4 U$ i" F
delete lpResultStr;
# Y" m+ z0 Y3 s3 t' N' `, e7 X }
3 c4 \! s6 l$ }, @3 N& ?7 n* X0 E/ b$ m% E+ \
ImmReleaseContext(hWnd,hIMC); //释放输入上下文* t% G& L; N, J9 z
}
* t( @& J9 s7 J- O2 @/ Q8 C+ t! _( u9 f
}
+ L( y( T P9 r' O- p
/ r3 m3 G7 h( Q0 lvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
& _+ A% A o B- ^3 B( _/ ?3 f6 T, `2 ^{
; [4 p& u: c* g+ V' F' X DWORD dwCommand = (DWORD) wParam;! A0 b, \- u- H9 E0 B
switch( dwCommand ); R/ X. x1 F4 d
{
5 M/ a1 `. S1 s1 r5 p3 n case IMN_CHANGECANDIDATE:
) A$ j& e. Z" J, y, a GetCandidateList( hWnd );' u( l9 B& k5 m5 K1 r
break;
; w& i! [( {4 Z% y9 \5 Y
$ U) B/ F7 }. J) e* G. n case IMN_CLOSECANDIDATE:
/ @0 b! _/ m' u9 T1 n g ClearCandidateList();
" h. ]( \% y L: L' E! P break;
( ^/ p! S6 a& Y* {* @: x/ g1 J. W+ c3 X' O, U& l& O% _# K! q
case IMN_OPENCANDIDATE:
, ~& j1 S2 j% ]5 A2 f2 k GetCandidateList( hWnd );
$ p8 @( m+ Y! G+ I break;$ P3 i2 M7 L( J O
}: R1 C2 P* N2 c- K, p9 ^
}! m1 j: N$ ^+ g" `! e* J
: s+ z" }# e. {2 y9 c! |2 Tvoid CIM::OnChar( TCHAR ch )& t* I$ ^! A2 p: \" f* m
{
9 {" R' ?0 Q0 N6 W7 n; \ int len = strlen( m_lpszImeInput );& F- u" [) S- R
, s- E: K; Z3 M& O' k$ _6 q3 s- _ if( ImeIsOpen() ) //输入法打开状态
# ?- I1 J' U& e6 z4 _ Z {
% `1 M2 S2 x4 q7 k5 y! V
( r0 G/ v$ t6 z% M( b9 }1 O }
2 e1 d- X4 u! F- C4 e- O1 Q$ r else //输入法关闭状态
' P q+ B; p$ F( i {0 Q! J5 F5 P6 w8 ^/ X3 W
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母
]) x& R2 ]+ I j& `! o, a3 a {
+ n+ o9 O- O3 J' G! q *( m_lpszImeInput + len ) = ch;% z( Z; O+ U% h
*( m_lpszImeInput + len + 1) = '\0';& K4 h d9 I3 M1 D% |& M4 v
}. {8 v3 \' V6 d9 N
}
" \; }1 o4 A4 W0 L
, y0 M: q0 B: B* Q. ]( \ if( ch == 8 ) //BackSpace字符' w% }: M( ~+ q/ ?
{
( J5 Q8 d: J- p/ z if( len == 0 ) //字符串长度为零; h% |, V3 E) s7 v
return;
( k0 W7 }( j ?3 N/ O, `, q4 r$ Z( z$ ^( D: Q
if( len == 1 ) //只有一个字符
* P1 k1 r; j7 ]: L {8 [" A7 p9 O! ?- {
*m_lpszImeInput = '\0';
% V+ c, b2 Q& G/ X return;, [4 O; m2 m6 f" v& s" z
}" H5 \4 e" c% F3 ]1 `
. l. A r6 V1 y6 @. x3 l2 E BYTE cc1,cc2;
E. x4 U! p( G/ F3 W. G cc1 = *(m_lpszImeInput + len -1); //分离字节
0 N6 J* Y* }! ]. D1 } cc2 = *(m_lpszImeInput + len -2);
6 M% Y+ Z* l, b) v
: O3 A) i* F( B m7 E" Z; l if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0! @ q. X" @" C
*( m_lpszImeInput + len -2 ) = '\0';
( b- h3 }: o+ ]# |: y4 m" p else //是英文字符(单字节)& ~! D: {+ ]/ [1 `' s, e
*( m_lpszImeInput + len -1 ) = '\0';
7 l( T1 }1 t9 H# y+ p4 i- ~ }
3 x6 J/ v0 w) G# _# N}# J4 J2 G x2 S! v1 ?5 \" ]7 h
! \- I, M, Y7 ?) h
BOOL CIM::GetCandidateList(HWND hWnd)% ^ O: T' F. F4 F' P$ u" E1 }
{' V$ `; Y) N0 C# S* I8 n) A
DWORD dwSize; . @% i+ J9 F. Y1 w; O4 t6 k
HIMC hIMC;- B4 m; S! j: @
2 ~8 j1 ]! ~/ ?. Q/ K J ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
- E- E1 h X d$ V, B6 a/ K d# D b S% K" B' }
if( m_lpCandList )
. Y& }* \9 H' g& E {$ E( l4 T; l7 v h6 K6 Z3 G1 _
delete m_lpCandList;
( g [* V! ^8 v" r- |8 W/ v0 u m_lpCandList = NULL;
* G T# u2 x I" B) S- t! n }5 a( U" v! O! T
- a9 R9 \, R( k& K, { if( GetKeyboardLayout(0)==0 )
g4 q& S# h, o9 x {
: v2 P, a( Y% |; V# u return FALSE;
* y( U4 l9 L) x* d1 t& n }3 }2 X+ I, a, ~0 B7 `1 l* F4 s) ` z z
6 ?8 z2 U2 l& V d7 g+ \# Q* `
hIMC = ImmGetContext(hWnd); //取得输入上下文- d9 D2 {8 m9 z" S# l
if(hIMC == NULL), T- d& r4 E1 q+ Y" T
{* e" N% S# C7 R
return FALSE;$ |5 a6 Q' C- ]4 f/ f2 n
}+ o! @# N3 e4 ~. B7 e$ j' l+ _
( w+ @7 O9 B: l0 i
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );6 f3 ~& b# Y, X6 J7 f0 U
if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) ' n1 ?3 c$ o3 R: x
{8 n4 O+ M$ D, w& g, S: l
m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
0 C$ U% w2 _/ [8 b- o if(m_lpCandList)
2 b3 `9 D) Y) R; O7 o5 _ {6 r! _0 {2 t5 q: N2 G8 |
ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
" d' S2 j3 X+ {: s. j' G CandidateToString(m_lpCandList);
( J$ \3 D' ]. j4 Q; q7 r9 ~) a1 n }+ A+ i; w. N8 S+ w a& |$ J3 C
}
9 w0 `" X; c2 d& u0 x4 M" N
# r/ W5 k5 b6 \" T. y* C# g9 \ ImmReleaseContext(hWnd,hIMC);
& N z5 `$ H0 w, G* _% N- J
4 E. Y& M8 i6 W4 R/ L/ ?" _9 l return TRUE;
9 {8 y4 Z; O+ u2 c4 J}1 O4 i B1 H" D6 T, @) R! Z/ U
6 l$ p: W) g. M6 E, m1 @void CIM::ClearCandidateList()
0 l2 S" Y5 j* S' W8 x( {{' l9 n' ]* }4 }6 B
if(m_lpCandList)
+ E- I" G- I4 U3 W/ J' G {) C" U* A( X- u/ A& ]/ h
delete m_lpCandList;1 r! K+ q5 F" \1 F; O
m_lpCandList = NULL;8 ~/ o. q; k* g- P9 j! \
}/ I4 I# t& d2 K5 P1 D4 m) F
ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );% o" m$ |* \# O9 N& f
}* y/ W7 i8 x1 ]; ^- ~7 M
+ s- F6 {0 m) J8 y' d- a$ h- b4 ~. b8 o
! j4 f( l7 p' y. ?" w2 [
LPSTR CIM::GetCurInputLanguageDesc()$ W/ h) T. K1 a d! c/ e
{9 M8 \) B- f4 ^% x
HKL hKL = GetKeyboardLayout(0); # r/ {* c/ q: l: }3 ?& s: [) D+ L6 a+ `
! y7 O i% ~+ \+ d" A- H if( m_lpszCurInputLanguageDesc != NULL )
/ l& {- z! ]$ M; d3 N0 j: V0 d CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^, H' o4 U! \+ j9 u
! f3 P f' ]# s- n8 T int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度) ^2 T- _# {4 k1 M6 ?0 a
+ |' [; D3 s2 o: b& ]5 t CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );2 _5 [* t# H8 R7 [8 G' e2 X6 Z
# N$ x4 X: |% F* z* N
if( lengh )
. `, {( t- ]! o* I9 J( j {
3 s! d' P" h& d; H ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
. i: y& K1 ]. s# i; v0 P }
0 d! S# K0 X& N$ c- d/ I4 c else
( W7 J0 @' E' K b. W' z- o {; x; S7 q& c$ i; ]7 V
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );+ b4 f" T4 t7 l9 _
}6 g; Q6 G0 K k4 C) C4 c- ~
+ U+ F5 R6 J( p( Q0 Q, @
return m_lpszCurInputLanguageDesc;
4 s. N6 l# l, Z3 f* R' c( ]}: N# d) b# e( W9 y
" x2 C' H! I7 {. z. X% pvoid CIM::UpdateShow()( B7 f& X2 d; \/ x" D' L
{$ p: u' p, z0 U; e: q
POINT pt;
$ n! }; K: I" A5 E V3 P/ Y pt.y = 450;* ~# s1 Z) {, b/ ~1 }
pt.x = 400; 6 q) n. K- \& U9 D
ttffont.SetSurface( DD_GetBackScreen() );
/ O) X" W* o! U ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述, r2 |0 ?! V6 t7 `9 l3 t
2 l% h; C9 \2 l pt.y = 420;7 Y3 M- v; l: b# d) [
pt.x = 20;
9 N8 I7 R1 ], B4 Y4 Q9 ~% z, ? ttffont.ShowText( m_cCandidateList,&pt );" f' z# @8 G% O1 z
R6 K: D/ h8 M& ?& R. D pt.y = 450;
* L( m! O% g, \ m$ r5 f1 n pt.x = 20;- ~ k4 ^8 U5 o
if( *m_lpszImeInput == '\0' )
& G) L4 ]( ~. c return;
7 \6 S8 W/ e; A7 G5 {- N; s2 Q% r( n8 V+ I8 G
ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字/ G/ [) W; b0 S% {: K, Z, ?+ [
}
9 I3 v/ K' M6 b$ B" O# |; a! h# g+ e* |4 k/ f3 X
LPSTR CIM::GetResultString(), x! I, ?3 q" E2 ?+ M7 G% Y7 t
{
% Y* p; Y# [2 D9 T return m_lpszImeInput;
$ v1 L; ? g, s q4 l# l}
& O4 i, _/ K! c; l# h5 Z9 m4 W. K" a1 H* u8 Z0 w
BOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)
: v9 w/ J/ F m{$ D2 V% P- o6 t8 z6 ~7 u& W2 }8 a/ t
if( !m_lpCandList )
+ q1 W9 m* N/ x( }2 x. A+ { return FALSE;
& S" J3 I9 V# u& l
* r; `8 ?4 k: B- |/ S if( m_lpCandList->dwCount>0 )" N, p. X: m2 r% G# }% d2 o. ]* R5 T6 l; m
{% R7 ?0 U8 U! m+ d5 G+ I
LPDWORD lpdwOffset;: A( \3 U- v' R m( m) w
" B% X. M! G* f$ O6 ^ lpdwOffset = &m_lpCandList->dwOffset[0];) S2 u$ H+ o, j
" _/ l, F9 @- c lpdwOffset += m_lpCandList->dwPageStart;7 M3 O+ R0 A4 h3 }1 N
0 T) }, B; |) H1 ?9 L
ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );
9 `. ?* C7 a/ u- E2 s/ [2 d; W$ `: c& f% R
DWORD z=1;. n% N& _/ B" A: M: L6 Q
for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) , t, l! t7 D, G
{ % g3 X- ^) t- M3 ]% U, Q ?
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;* I" e# C7 \: x* k0 J
char buf[255];
; L+ G3 n( G" g8 K' u4 Y+ Z sprintf( buf,"%d.%s",z,lpstr );
! r1 ?( ~; T8 U strcat( m_cCandidateList,buf );" V2 C h8 U! {2 x
z++;6 g* y e6 d7 z$ ]/ C5 P
}
% S* Y1 c: K: z
- Z: |5 {) T$ r1 d return TRUE;1 q8 C9 k0 Q+ O
}
; h" \0 y J: F6 W; A/ q2 m& q) d9 R* f/ Y% F, r4 [
return FALSE;8 m: P' c( m a; l
}& G. Z! ~& s: n# c6 Y/ N) T# T5 x
, Y C' x* B. k% e: }9 h7 `8 M2 Z9 W3 zBOOL CIM::ImeIsOpen()" w! a, V6 R2 j, _! J" T: ]
{
% a4 O' b" M9 J. m' U9 T return ImmIsIME( GetKeyboardLayout(0) );' k* v# x5 ~: z# N2 y5 i8 ]. `2 V
} |
|