|
//******************************************************************//
5 J! H) d3 @, h$ u//
4 q$ A$ }0 _, r# Y! }4 H% c// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
! b9 C5 G* Z$ _! u1 O) ]2 \// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
7 q; z5 ]* j& ]2 u7 Y+ S! }6 ]// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
9 B% O- J, Y3 ~1 i// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT
# @' [+ o$ s6 D/ a2 d5 D, {// 为显示信息用,可以用其他方法替换如 TxtOut() 等
) o, N7 o1 }1 b( {& G' X4 }//
: U9 ^. v& I0 Y: |//******************************************************************//+ [: H' d' y( X A; s
: E5 c. g R! Y: v K0 f( n: H$ a//////////////////////////////////////////////////////////////////////
% r" T; l# B4 B7 y7 ]//
P- O1 U3 q0 f* d7 ]9 e// IM.h: CIM class (使用系统)输入法类% a* j7 { M# f' N$ q1 g: H9 Z
// 2001/4/30 Write by Jerry Wang7 R; w$ w, D0 `2 r# O; A# H& K
// 感谢大大鱼的帮助; c' h8 _! w& i% B
// Need Lib: imm32.lib
8 `% Z9 h& v$ u+ | ~4 n//
: e3 t- U3 N6 Q4 A5 n p/////////////////////////////////////////////////////////////////////// k( ~* L) d* |$ T( m
" E7 }% c- A$ ~: \
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)+ a6 v4 A; h$ G7 N/ w* C
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_
; Y9 }3 o3 i, O$ B" H3 a# s: j* D% l! `3 T$ O1 e* H% P
#if _MSC_VER > 1000
! p9 r7 z* l) v9 X) G w#pragma once" m1 P$ M. f, j: G9 ` Q+ @: Q
#endif // _MSC_VER > 1000
1 A: t- Y. L, B6 n! d
5 a% K, v+ d1 J0 K#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数7 L- u9 m/ j" @
6 F, [: v0 G* Y6 Z; `" d
#include "FindMe.h"; r, g) i) J8 E$ U! x- w; U1 R s
9 c; c1 ]! R2 f8 jclass CIM j& f. ?! S7 ?. r
{3 V6 a x! l# Y% m
private:
9 y5 k9 a5 y! k! }, y5 R5 @ CTTFFont ttffont; //显示信息8 L( ]9 M% r% [) T6 z h/ ]
LPCANDIDATELIST m_lpCandList; //输入法候选文字列表
$ s2 t# ^) P, \; X LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针
1 m, @3 p4 y3 q- A( Q h" d LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针
( p! G4 [- V9 s/ K7 N char m_cCandidateList[255]; //候选文字列表缓冲区) L# @7 k4 s" M0 z5 ~! o
char m_cInput[64]; //输入的字母7 D! p& S B( q# R* X L5 g
0 X! f2 {+ f! l* i5 H BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串5 o- \7 s, w/ k- t2 m; R
6 e0 u# B1 i7 X8 H0 V9 ]; A7 t
public:! B9 @% f0 m' T* M+ c2 x
! k; Q- D7 U; h5 X CIM();
; e8 C$ o: L! A8 D7 n6 z virtual ~CIM();
% V% z$ @3 D0 x! s, n3 j0 I7 F" y/ J* I, W5 t& k C
LPSTR GetResultString( void ); //取得输入的字符串. W. _, l- W; ?% A) A! D, X
: e' X! v4 P* E% I% f. N void UpdateShow( ); //显示输入法信息
3 f3 o" Z- p! K: b: G
" i" e( M) O N8 Q; i. T0 I! D LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述8 O3 T r1 f7 [: g# D
void ClearCandidateList( void ); //清除输入法文字候选列表( o' V* ~0 X y4 E. s1 l- I4 x" F
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表
Y Y. v; _8 P# t* W* l. p BOOL ImeIsOpen( void ); //输入法是否打开
1 h: n+ I; P& {9 ^( R3 a void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
: X, T/ Z, y" F; }' ^4 H8 } void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息6 R% a8 ` s: w, [# x2 x' K
void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息& ?& r( E3 ^4 z g: H
};& U4 Q! } U& H4 q+ v- _6 V
3 Y6 u7 {' b0 `% f. p
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
1 e! @0 z3 I! E# z! d' _, Z C6 L# t. r: O
& O' K- V+ M8 X2 I9 z* D: e {
, C. m7 J$ _5 B! l//*********************************************************************************************//0 B6 a& I7 p, }
! _, Q4 }. z5 K- `) p////////////////////////////////////////////////////////////////////// E0 O6 N9 b+ W& D, |( m% H
//
2 d& k8 K7 I8 |7 E& ~' {// IM.cpp: CIM class (使用系统)输入法类
1 l) K' T$ L3 ~: R. d J) Y// 2001/4/30 Write by Jerry Wang
" J d7 B# Q, d1 ]// 感谢大大鱼的帮助2 R" L7 m+ ?; ~
// Need Lib: imm32.lib$ a7 C- D4 g. ?* ]0 u
//
6 Y. ~; l4 i, k9 o) q& `: [+ i//////////////////////////////////////////////////////////////////////5 i0 F3 i: O8 ^
+ z! d& z# M6 F0 \$ d5 h a, `% g* F" Y#include "imm.h"; q8 y7 n) D- O1 t4 I
3 {/ ?* L+ g9 R$ [//////////////////////////////////////////////////////////////////////* S- } `. Y. f& s( j# \1 @# j
// Construction/Destruction: O) p4 o! g) j5 E
////////////////////////////////////////////////////////////////////// r& |4 Z7 d( `% j& a' t6 n, f
# X/ W9 x! a- q4 A
CIM::CIM()
' [. h; h; H) l. z7 J3 z2 ]{1 m7 ~$ T% Q1 C, U" q" i
m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];0 i9 L$ @- J: y
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );7 x4 g8 u2 K) w6 O
*m_lpszImeInput = '\0';- m4 k9 |, ?2 C; N) [4 G: {9 q
*m_cInput = '\0';5 x6 B7 W7 ?% M$ y. B# i
l5 E8 M/ w$ O/ ] ttffont.Create( "黑体",15,RGB(255,255,255) );9 I& a. ?; n' U6 r5 C+ Z) A2 [
GetCurInputLanguageDesc();# q/ K6 ~8 b4 p& ~4 ]$ F
}' \% u3 }" l# Y9 V
8 R7 E N/ P2 \+ e9 iCIM::~CIM()- @& q& [+ j# E8 o. t
{
0 o0 V2 n7 z8 I: a d7 o1 M7 L2 X ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );) t4 x* j/ G% l+ O7 y2 ^ P
& |# p! a' R/ L3 O CHKB( delete m_lpszImeInput ); 0 f6 N7 o9 |. E. @6 O% z' G0 A% A
if( m_lpszCurInputLanguageDesc != NULL )
" M+ y i1 ~* N CHKB( delete m_lpszCurInputLanguageDesc );
, t7 C5 j W3 Y0 g% z7 x}7 L& D6 c; p$ U% ]- c
( X- Y8 H7 W6 _* `, e
void CIM::OnImeComposition(HWND hWnd, LPARAM lParam)6 Y6 g) `/ Q! N* Y% ^4 T9 D D
{( b4 q: o7 L# }* w, A
if (lParam & GCS_RESULTSTR)3 F2 w1 q$ p5 [' _
{( G, V# ^. d! G y% V6 X& A6 ?/ v
HIMC hIMC; //输入设备上下文
: x$ U+ @9 r# U( Q& O# N DWORD dwLen;
, w6 n# \0 ^2 F LPSTR lpResultStr;
" U! S6 n8 m8 i; d
! q1 I0 P2 c2 P5 B9 G: O hIMC = ImmGetContext(hWnd); //取得输入上下文
4 g; O o# p+ R
+ v/ v1 W3 Z/ o if (!hIMC): H8 ^5 K+ q% O. u# ]4 x X
return;
) l' K) K! E( p% a1 Z6 Q% |2 S
$ X: x" E% m o3 t, }7 m9 g dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);- u7 D' {3 x, D9 J- C
dwLen+=1;
# W T- e' g/ v% r" T' K7 o0 }
9 d( I, x; g: y if(dwLen)
7 k/ {" q e/ q* D b {, `0 L8 t" I/ L
lpResultStr = new char[ dwLen ];6 }, d0 \% _. b# l& ]) M/ `* o) ^- f
) u# J& c% F! i8 Q //// 缓冲区已经满了& S3 I' b! p6 O) Q0 H+ ?% l$ _; X3 V
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )
$ D# ]& `0 H6 A {
1 H9 h/ [& G- ]) J% { MessageBeep( 0 );
- ~7 r# E6 s% i& R return;
. J% U$ n0 t! H: s2 U6 Y5 Q }
9 ~9 t% u) O6 e, Z, x7 C1 }! C ZeroMemory( lpResultStr ,dwLen );
% I8 `$ X2 U" Y* r( r9 f if (lpResultStr)% a, G3 s) ]+ Y, J6 l
{" s1 T% w( C, ?2 K4 P
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);( D7 j' f' |4 K/ H) n
strcat( m_lpszImeInput,lpResultStr );
1 P8 `% G8 s0 K5 e1 O. E! v& }8 E3 Y }
4 Q6 I. x0 S* u+ @" V delete lpResultStr;
! ?0 l( {% `7 S+ Z }& h: }* u2 g- w* _$ H
# a+ [, L% X- J& f9 N
ImmReleaseContext(hWnd,hIMC); //释放输入上下文# m9 W0 ^& ]; w
}
& j. `/ s: I, j u
; z& t0 V) i, _/ P6 D8 `2 d}$ J, }2 j. Z' E; c
. s, w* {3 M% ]% F$ X0 _void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
/ p# k* {4 V& e5 E3 Q+ E5 }8 j{
; T9 z4 C/ L5 F' c DWORD dwCommand = (DWORD) wParam;( N- M0 l% o, H% O: j; ^! k5 T5 \
switch( dwCommand )
: o, E& ]1 d8 c( s1 N4 q8 r {$ E: C% k/ |) m, Q" i4 I
case IMN_CHANGECANDIDATE:
8 ?/ V( Z/ Q. S1 N) J/ J% j GetCandidateList( hWnd );$ s; ^1 m8 _' z5 v# l
break;
9 o3 y2 p; F, n" n" u2 H- S; s
0 h# U0 i, g2 F" m) m" a8 @" s case IMN_CLOSECANDIDATE:8 N5 z9 K+ {9 h+ A1 Q
ClearCandidateList();
' d; F1 e. @+ E2 M5 m2 v# v break;
0 K' e* Q; S( l$ ]2 S7 W/ k" J2 y& q; T1 D4 b
case IMN_OPENCANDIDATE:
& F% f# T$ @& u# _) q7 { GetCandidateList( hWnd );6 O& c& [ p2 a) }
break;
- G0 j2 S* Q( G) M) }3 o+ K }
1 K ^; e# G% u8 p}
( h1 o; `) Y8 p3 }
2 ` i, ^) o9 ^2 X9 [1 Nvoid CIM::OnChar( TCHAR ch )* S- l& F. x- Y* ?5 \8 M
{
/ W0 E4 ~8 K' r* @- H int len = strlen( m_lpszImeInput );6 ]8 I- V# x" W9 _( R
4 C* G( A, b4 r if( ImeIsOpen() ) //输入法打开状态4 j$ |$ b( M9 S+ \( _0 j5 T
{- r7 D3 J3 C l0 M& B
. b" ?( a) \( M
}
9 A* _* Z) b! ~2 B% a else //输入法关闭状态
+ ]& v/ [: o( n3 N {
6 h- }1 [1 K8 p1 g if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母
9 f2 Q/ d- ~7 m; x" Y: e {
6 s) `( Y( @+ Q$ l *( m_lpszImeInput + len ) = ch;
% ?4 {, W8 S" r *( m_lpszImeInput + len + 1) = '\0';; }1 {5 h8 M" V! U5 b9 U
}
9 I- N) m: T" k }6 k5 i- b2 P: K2 D
, X }& }, p( l8 |, y; R
if( ch == 8 ) //BackSpace字符
8 r( l9 k; c ^* I$ ?8 x {0 z2 ?7 u. ` R7 p- f& C& u
if( len == 0 ) //字符串长度为零
+ f @7 P* o. R* }8 |4 o" l$ c# | P return;* V9 m: P; s& ~6 z/ ? l
- R4 o7 _: R. F$ j+ P. h
if( len == 1 ) //只有一个字符" k) u$ W& D7 X% y
{: c$ P" B) y( P, t2 o
*m_lpszImeInput = '\0';
7 K- D3 S7 l$ ~( x4 v. S5 M3 J return;
0 q3 @2 @" b. h& e v' F }
3 k& B, M6 S$ S6 W4 I/ C# w7 L- O" b0 H5 t. L; V* s
BYTE cc1,cc2;
" `2 S" Q) e1 Q* K7 W& R cc1 = *(m_lpszImeInput + len -1); //分离字节
7 k; _* J7 y4 b cc2 = *(m_lpszImeInput + len -2);
2 D6 {, V% }2 ?$ O- z# [
1 o# l# v$ Z3 z4 k if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA07 H$ H4 |7 ^9 n; A
*( m_lpszImeInput + len -2 ) = '\0';( c6 e; _, b j2 _% `0 t4 N* l5 J
else //是英文字符(单字节)
; }) [" Y& K2 Y( }" H) d *( m_lpszImeInput + len -1 ) = '\0';+ n; h. u! d& `/ k6 k) w+ Q) G# i
}
* ~# E2 C* Y* X' v" e4 H* o}
' P/ _/ d9 e+ K- }! R+ l
1 B& Y9 w! u; C9 B5 J1 UBOOL CIM::GetCandidateList(HWND hWnd)0 o+ ], a/ @; G0 m" s$ z4 R
{4 }% k" J/ m5 l1 s3 @6 x
DWORD dwSize;
, W2 Z; N- K1 u HIMC hIMC;
* W' [& w5 \8 T5 [
# _) N! ]( {7 G0 c6 { ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );; h* X# h A/ h2 T
" s0 U- P7 e) [
if( m_lpCandList )
5 i* R7 w& W: U% `. M/ ~! n6 G {3 V( ?! V5 T! i: h6 R& M6 y) B
delete m_lpCandList;1 B7 m% \! E$ |4 e+ y; s: I
m_lpCandList = NULL;: T* j: J6 `& H, r) @* H5 H) c
}$ C4 ?: n! H$ Y( ~4 w
; P9 x' Z) z+ R" l* K
if( GetKeyboardLayout(0)==0 )
, O. @! E# B9 {* c! y {
, E0 t- t! v+ ~1 } o: \4 \, B) O return FALSE;
1 c* n3 m6 F: ` }" H ~$ m$ K1 f: H
, f6 n: Q) K, e% M! H, ~5 S hIMC = ImmGetContext(hWnd); //取得输入上下文
- o; r: Z( L9 \& M! d3 D$ Z if(hIMC == NULL)
: f" x& n3 O1 t" ^; g1 A9 {6 l {4 f3 C6 j, X0 u$ w
return FALSE;# F' A: f" y/ e3 T! C; r
}' A, O4 A0 y8 r4 D, {5 Z v# M/ x
* k- d3 f& K' `8 _- D: D
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
/ y/ v* l0 {! M if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) ! r3 R* O N; {6 b+ Q, W" v6 l5 F
{) E" K+ b+ j2 u! C4 ^6 J
m_lpCandList = (LPCANDIDATELIST)new char[dwSize]; 9 A2 r+ x5 p/ d9 A# c2 Y) [9 T% \& Z: u
if(m_lpCandList)
8 P! S: N- @# i {
. H1 ^2 A' L/ \7 | ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
5 x% T' K# A+ V: `: }6 q b! R$ g CandidateToString(m_lpCandList);, |3 E( {* z) Z4 u0 v3 Y! g2 q ]
}
4 W; c" d# y1 Z* E$ F) y! Y } " J0 Y8 m7 \, T
+ P$ O" s" j% N
ImmReleaseContext(hWnd,hIMC);: j/ Y, R/ ^7 C! M) \0 W& I7 j
$ c; r8 k7 S2 ^0 A7 V2 w0 L* c return TRUE;
1 O4 ]! u* m; b6 k8 r+ A1 Z* G, P' q, B}- h% L, m6 [0 {4 {
! w" u1 e) Z- a: v" G) w
void CIM::ClearCandidateList()
" _) X( j5 i" c{+ l; p& \+ d T2 H; Q. ]# j
if(m_lpCandList)
{0 S( P/ U3 t. Z$ A. { {0 `' M1 C/ C3 l
delete m_lpCandList;3 Z2 z/ }4 y) T# q- [ Q* D7 q
m_lpCandList = NULL;" \/ H. Y! A( f, x, E8 L
}
5 w' m1 z+ B% i) ^8 e8 H* y ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );
9 M+ v! n- }9 R}& Y" j; X4 N3 d) l* `! n
" n9 q( I6 p9 |1 H( x4 v
$ X) |) I' H) S, O, i) O: x
LPSTR CIM::GetCurInputLanguageDesc()
[" j7 q0 G* L3 \ N4 ~{7 X4 e- ~5 J, v9 S
HKL hKL = GetKeyboardLayout(0);
" ]' u6 }* n* g4 Y
3 h3 Q: c2 E8 d9 K8 e8 u5 x if( m_lpszCurInputLanguageDesc != NULL )
. x( x, w; E9 a8 }: _" W/ U CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^' {4 c# q" K( T* C
: @+ ]6 U: C& C. }3 ~ int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度$ J8 }% `6 n2 ]% V0 Y5 N4 B9 p
! f) [: L8 e" I" C7 O" w% q+ x D
CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );+ N8 \4 d1 g/ `
5 S) r- F! }; U5 c3 q
if( lengh )
( A6 u- x; n4 \1 o1 b) v+ ~* m {
, G" C6 U7 A! K+ P2 c, D! Q' c ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);5 J' N a8 [7 Q2 Q% q9 f! `
}
2 C+ C- J$ Q7 O) k$ t else3 {# I+ Q! c! u- W
{; `' `5 q% H! D) F7 @
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );' E. [ q: a5 \% ~6 B; `
}0 y$ I( R0 {& q; b4 q; b
3 F+ D: e9 y# w) c5 Y
return m_lpszCurInputLanguageDesc;# m, a# z4 x$ ]: R
}3 v) d, k& @9 _ N( Z8 z& D7 t
- \; J6 v8 S6 |0 O v. l# evoid CIM::UpdateShow()
7 Z1 r' v; {6 z5 k2 k7 O{+ [! D3 L% m7 C9 u, [' ?8 ?
POINT pt;
* @) |0 Y& h, @, r pt.y = 450;
8 A! W7 u; G+ I. e7 E- _% C pt.x = 400;
% `" q" U N; O5 ]! z ttffont.SetSurface( DD_GetBackScreen() );
3 Q3 Q. L" }! L9 D4 j ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述. I; f6 |5 |( P e! q+ Q8 |
2 a8 q0 O# d% k U, ?+ f
pt.y = 420;
/ p; l$ W5 a! {9 K pt.x = 20;, a1 q% u& A( ^7 A: {' @7 h
ttffont.ShowText( m_cCandidateList,&pt );; J& g* A: r* v
% [. y* Y) D" t0 | pt.y = 450;
5 b4 Q' F1 R) p pt.x = 20;
. S8 F+ f7 L9 W if( *m_lpszImeInput == '\0' )( c5 h& D, A+ X) ~9 [. q% u) j
return;7 K* y' @) x: R: o' c ]
$ F) ]- D# z/ M/ q+ U6 c& d9 Q
ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字5 Y' H. J6 h0 x
}( d& q( F) H/ [- x8 k
! X1 Y" `' Q8 F; B6 LLPSTR CIM::GetResultString()
0 U/ |+ j$ B$ C# U' D' ?+ {/ M4 _{. s4 |, p$ i# K. Z$ [6 q7 V
return m_lpszImeInput;& @# B6 z) w% c T. [3 [9 \
}3 d: Z7 i/ R1 c1 P8 p$ z7 S
6 R2 u$ n5 [9 p( n" o# g4 q T
BOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)" \& }( i0 @* U8 ?
{
: t0 v1 c( O. F9 p3 b# W% ?& _3 Y if( !m_lpCandList ) V% `0 l- F4 _5 H$ ^/ D, R1 ?
return FALSE;% z' @+ T7 H! r. J# l& o1 E
& O; W% ^& G" h; F, ^5 V6 r* w if( m_lpCandList->dwCount>0 ). R, E7 Y: T% L2 G, o$ R/ x( y
{
( A& |) _/ x' G6 m5 o- _5 J LPDWORD lpdwOffset;
# H2 b% ^2 P) o( P. x, M) C7 Z$ a9 p3 H+ T
lpdwOffset = &m_lpCandList->dwOffset[0];- m( g+ s' c) g
+ A+ m% w0 n8 Y+ x' Q lpdwOffset += m_lpCandList->dwPageStart;' L4 ]1 d. K; O% L( C$ m( I
5 Q4 M# U4 y4 j& w# B ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );
9 Y E" e1 y- ?; ]' ?8 R" b8 ^/ ]5 _
DWORD z=1;
6 ~2 t5 \9 X9 ~" o for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++)
+ A! `1 f4 [4 o2 @# o% H. C { 3 J' P# S$ e5 A9 @0 ? u
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;
! z4 \3 K2 O) _7 u+ O# e: O/ @: j4 p char buf[255];. H3 X9 E. c* R: U. |( g
sprintf( buf,"%d.%s",z,lpstr );. w8 M8 W- y2 S9 ^; [. J- o, @
strcat( m_cCandidateList,buf );2 T" M1 r. b& Z' d1 d: r
z++;
( [# Q& N! r3 w# d! X/ B3 G }
2 [9 F+ V1 Y& V3 `
7 W6 r7 L; I$ r+ u/ L return TRUE;
6 v8 z% c! ^0 P4 x @: k8 F+ Z& r } d( J1 J$ J7 X! ~: l
" N" [+ x- S% A' H! L# Y( i' c
return FALSE;
: t- N+ x/ m, _1 y- i! L4 |}
$ I' Y) |4 G+ \; e* k2 e7 _; B. @- f! F- H' r
BOOL CIM::ImeIsOpen()3 ^6 V' g# q8 i2 s5 E6 M2 s( F( K
{
8 _( o( K' i& e6 f return ImmIsIME( GetKeyboardLayout(0) );
: n: |1 i. b- P; G; B l2 s* `} |
|