|
|
//******************************************************************//; r8 d' r) K+ G, V4 G, T! K. y* Y
//5 |8 y; K' @# Z6 {! h m( U3 s9 l
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家5 _: {6 d8 }& C, r& z3 E- {* ?
// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-): `( K0 A% B$ Y0 x" ^- g* R# ~
// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
9 m$ h- L, r5 m2 p- Z8 U1 D// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT3 K* \1 @8 A* c# v
// 为显示信息用,可以用其他方法替换如 TxtOut() 等0 m5 C; X* K, b( {# ]$ @
//9 _8 ^ ~9 m1 A f
//******************************************************************//+ ?0 H T% Z: I1 C* O: o
' i" O0 c- s9 Z, V$ P, t6 R
//////////////////////////////////////////////////////////////////////* P) u |9 ?: v) A* w, F! L
//
2 _+ k Z1 R' c8 U5 {, E! Q// IM.h: CIM class (使用系统)输入法类
9 J: S7 y/ m5 E4 [0 Q1 S; k* U// 2001/4/30 Write by Jerry Wang
9 q) l6 x3 ?) j$ M// 感谢大大鱼的帮助9 ?. E& V! C2 S$ n7 I
// Need Lib: imm32.lib
* G4 F$ ?7 k- t0 H//
* l6 b% L: ^6 k# P' Q6 j) ^5 l//////////////////////////////////////////////////////////////////////0 u% @( J! y6 N+ _
; w+ j- A2 y; S* e; ^/ o
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)& U% X4 V) U) _* x1 t! o
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_
- \5 E9 `, l- A. i" E
% I' g, W8 R# e- ?#if _MSC_VER > 10006 C3 f2 j3 ]- R) _' R7 e1 B- z+ X, d
#pragma once
5 _, t3 ^( q9 g* ~5 x#endif // _MSC_VER > 1000
6 F+ z. c/ k$ o* |5 q$ w$ K9 w4 a4 O
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数
1 z* i" @2 w$ m( [. Q" O
l6 u. @9 S+ e m" Y' K#include "FindMe.h"
$ U" A1 D a' i: z& k, ~7 `& ~) B/ ~
class CIM
- F( `' I3 a+ n* e5 o{
8 c! Z5 |# M* X5 ~2 s/ J& uprivate:
2 _! b6 f4 r) R CTTFFont ttffont; //显示信息
) U( m8 B: E8 S LPCANDIDATELIST m_lpCandList; //输入法候选文字列表
3 W& }" u# C1 N h' g! a% c LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针
0 ` d1 O3 ]/ ~) m- Y D) v2 U LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针
5 }* M' r& C% M% R" H" }+ x, f char m_cCandidateList[255]; //候选文字列表缓冲区2 c0 W, }+ d' x- P6 p; |$ Z
char m_cInput[64]; //输入的字母- V8 ? O7 B" q. V) \
+ q+ ^4 n* Q) q" E. c) X( c' o BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串. X6 d( p. J% m0 d* X2 n
# n' l- l! q3 r# }. [
public:' H0 W: f% G/ a
+ N5 `7 S0 C) E. D i CIM();1 C6 i) x k! i/ D2 u% o. n
virtual ~CIM();
! _5 o, P6 h' X' R# w D3 y" s# M9 ?
LPSTR GetResultString( void ); //取得输入的字符串
, B0 t. K% A! M* }! i- P5 A
. ~! ~/ k7 B( k1 i void UpdateShow( ); //显示输入法信息
" p- Y8 Y4 ~, a! y8 O) J6 H( b6 M' P% e B7 D
LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述. G. i* o) {; L! K8 {
void ClearCandidateList( void ); //清除输入法文字候选列表6 u8 C$ O4 X/ X* k
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表
( z5 d0 E% m5 B) a3 C BOOL ImeIsOpen( void ); //输入法是否打开; s. n0 q) b8 ?8 t9 V8 S
void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
( h2 I& s. S* K$ ?/ n void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息, I" a, T1 F+ @! U
void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
: G5 X, e! F% w5 A0 P7 ?/ J};
t7 ^& b- s, l6 }, t2 m7 a- B' `" C/ g; D) d8 ?, C
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
( G9 Z6 D+ T7 p! b7 I* I4 h; V2 k. I
' B$ l+ i8 Q/ P- l; u) P' @. o# l6 C \
//*********************************************************************************************//
3 T7 P2 F/ y- @4 M/ x8 L7 V h! l+ v z* h6 y
//////////////////////////////////////////////////////////////////////
# C1 j; d4 D( e4 S//
: u; k) c/ c+ O* i8 L// IM.cpp: CIM class (使用系统)输入法类8 f1 E' u; K* g2 u
// 2001/4/30 Write by Jerry Wang
' p( l7 N3 }: F6 n. z// 感谢大大鱼的帮助
7 d9 s* C1 ?( |# D9 j& B5 e1 \5 T// Need Lib: imm32.lib
) [/ Z( v1 F0 y0 s3 c4 w3 Q//
9 K# K* B! K, }: K) W6 s% T//////////////////////////////////////////////////////////////////////
' Y+ y/ |& s- m6 L5 P p. v. g* e, n# V" H3 r8 k5 d- n
#include "imm.h"
" B+ Z8 l. z4 }- r: _
& R+ |9 Q" R& N' {: e& T//////////////////////////////////////////////////////////////////////
1 z3 C9 F/ N; Q3 Z' L// Construction/Destruction8 l B& U. M' _/ {
//////////////////////////////////////////////////////////////////////" T, P8 k {2 X O# S4 x' y2 k
: n% X4 j% c/ L/ Y$ d1 M; S& z
CIM::CIM(); R5 E8 u/ |7 \
{
/ g1 Y) K! y; r# b$ t4 |0 `! P$ ~% R m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];1 o# D/ j; b" J7 A
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
, R) L5 \* B' \# ?# A' r( V *m_lpszImeInput = '\0';5 G/ L8 O( i" b x' y7 B
*m_cInput = '\0';. Q) J8 S# O' c0 n% K! `* I
7 K: w. \' }3 r% G6 a ttffont.Create( "黑体",15,RGB(255,255,255) );! v3 E9 m& G- i' u6 r
GetCurInputLanguageDesc();
/ M- R) t, k/ _}
% {5 h& b% _ `5 |1 t5 O/ y0 _) @& k0 K
CIM::~CIM()4 \3 o& A# N0 T7 j$ n( b2 O
{
6 H5 D c! U! `, F& l% T ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );% C$ d$ o B5 n
% Z. H# I8 y# W& V# F+ I CHKB( delete m_lpszImeInput ); ' F, k' V3 |- X* W# _; ?3 Q
if( m_lpszCurInputLanguageDesc != NULL )
5 @3 L: e5 u* h CHKB( delete m_lpszCurInputLanguageDesc ); $ i: |( G9 q: y- z, f( o2 D" S
}
3 Z: u; d g* y0 I2 Q$ t# S2 G
% v2 C3 L* w6 d( a) evoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam)+ B! f; L0 W2 ?3 j! Y9 @
{+ Z7 q8 z- n/ P6 X7 z# k
if (lParam & GCS_RESULTSTR)
7 ?+ I, A" b" l# H- h7 n {
v6 V/ _! S0 O. L8 P! S' R+ X: o HIMC hIMC; //输入设备上下文; e% T: n; I/ @; D. A) ]4 k
DWORD dwLen;
3 c O& U( u3 K/ m/ V1 G6 E8 R LPSTR lpResultStr;
5 S% V8 [0 _! I( H( `8 @1 }% m( Y
* |/ U3 B$ u4 c3 A- @- O$ p. K hIMC = ImmGetContext(hWnd); //取得输入上下文# p5 E2 ^5 F& ^8 O. X
* x. J/ q% e3 h. j
if (!hIMC)6 I4 N0 m( ~8 \- d I" L8 {
return;. y6 T: w. v. }( U3 i, Q
8 m' \& v2 I: j) u0 U dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
4 A; \+ [) A, y# U; u dwLen+=1; F) G2 x! b* }2 S7 \0 s. ~
* P) K* ~ C z. p! c( a6 j if(dwLen)
, |" a. P9 R. z' {+ g+ F {& t, H- T, D$ f; V( Z
lpResultStr = new char[ dwLen ];( t, _ Z: M. p
3 y) n. L, z# Y$ k% ^ o( z& g! i, u
//// 缓冲区已经满了4 [5 \2 D) p. _% x) R6 q$ ?
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )
0 M$ y$ q; e) s+ r {$ z+ E8 `: a( ^2 A7 v2 R$ Z
MessageBeep( 0 );
& N* z- q8 s6 U return;9 ]5 k- S2 ]% D2 h/ [/ Y: V: G
}. Q: N1 S2 A- \! U5 \
ZeroMemory( lpResultStr ,dwLen );
6 z. N3 [3 T) r, }' q if (lpResultStr)
b& r5 \+ v: C# }2 d) z, E {& x* ?) t/ t. Y1 b5 \9 h# G$ n' k
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);1 t( a. ]- \1 B5 R
strcat( m_lpszImeInput,lpResultStr );8 t$ {! O- r* O" W2 r
}
$ x3 L8 G$ O0 J( Q# x. N* [7 M delete lpResultStr;- U. h- d5 V$ V
}
* ]% Z' t6 V$ \% }' ]% O
, ^: P# v1 L4 k4 j ImmReleaseContext(hWnd,hIMC); //释放输入上下文& K$ q0 K9 ~+ I, ~
} _2 l- ~7 F4 t/ z
' h0 V5 s8 O# a' p5 I) ?6 B3 P
}6 b+ z6 l& D5 q1 I( H9 M
5 M3 ?' P* }8 X! g. f. M
void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)8 h0 V) i, @( R% m% d) E( k
{
1 c% F8 a9 X2 W* y. ]# R DWORD dwCommand = (DWORD) wParam;( g& A# w7 h- W6 W0 q6 W: Q3 i5 R
switch( dwCommand )
/ \" W9 s3 r- \5 f# f {% {! d2 P: @+ U( g8 D
case IMN_CHANGECANDIDATE:' a) D# T# z4 ^$ U) x
GetCandidateList( hWnd );# X" |. k1 M4 J6 s4 p
break;. I$ W* {0 G( z; n# X
, h- [" {: @& F7 u2 g0 ]6 v
case IMN_CLOSECANDIDATE:* O6 U' w+ P0 B. L
ClearCandidateList();( c' Z7 T$ h, T9 k- a) X
break;
- y/ T, M7 B0 S! d
+ J3 m( v) p' E T/ x N( L4 G! z case IMN_OPENCANDIDATE:1 }( q( U; y9 h) r* [
GetCandidateList( hWnd );. K) ]3 F/ o! k9 Y% u: N* ] N) x
break;' K8 c" N. R5 r$ w* u
}
) x: T8 q G3 @& P5 m) ?2 n}" d1 n2 F& ?. e7 H# l1 J
% R" s4 e5 y6 s6 E9 V: P
void CIM::OnChar( TCHAR ch )+ q! R5 L* G L- `* e$ a
{$ Q& U6 o& w. `
int len = strlen( m_lpszImeInput );: c4 c1 f. G: I
- k6 {( @0 y; Q8 V( n2 P
if( ImeIsOpen() ) //输入法打开状态
) G. f2 I) Q* D" \, `0 y4 f {
9 Q7 t, n7 B; _# J1 L/ H6 z" U( G9 [8 l# C! _
}
5 {; `: ^: q" j S1 Q$ N2 u; x9 m else //输入法关闭状态
& f' W! P7 c$ o \! { {
. O x7 o6 x9 W6 l8 N if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母$ I/ @, O$ Q/ ^0 H( y" M9 A
{
; R4 u. E+ `8 @- e# R8 ~0 ` l *( m_lpszImeInput + len ) = ch;2 d# k7 X) C8 F' {
*( m_lpszImeInput + len + 1) = '\0';
, x+ s+ i6 ~! d2 K2 j" N& x5 g9 N }5 t" q! l" [: k& h/ j1 k
}4 S: u* n( a) b k3 R2 b
/ R; X1 u7 F2 H: P. E7 r# v4 A7 [& o
if( ch == 8 ) //BackSpace字符$ Y( W& [$ f8 N, v4 L+ |" N" z
{! k: X* y6 [- d, z) W( Z' j
if( len == 0 ) //字符串长度为零) E; _- F. T7 z5 x
return;
) K* t" |; c; M( H u
7 y5 z1 e6 H- j' S6 k if( len == 1 ) //只有一个字符
- R- \5 F. p# ? {
% A/ i; Z; J( M# ?6 L; m *m_lpszImeInput = '\0';
. _9 V7 Q8 o3 |# w3 s return;
5 P- i, C- z6 _% z) O7 G }. L1 P1 R' r/ u7 A' I8 O o5 v
8 e3 J3 `- H: v$ p; q0 U* E" q
BYTE cc1,cc2;9 ]# e; N+ F3 ^! [" A
cc1 = *(m_lpszImeInput + len -1); //分离字节
, r3 K1 ^+ e2 x. b# e cc2 = *(m_lpszImeInput + len -2);
' [! |4 R4 s+ N+ h0 ?0 }1 s7 ` R7 |3 O P; f& L. k
if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
0 I6 p, |2 \( V5 R0 q# [ *( m_lpszImeInput + len -2 ) = '\0';
$ }1 L' f# k* q. q1 V' V else //是英文字符(单字节)
1 [4 }, ]* S6 l+ ^% }: Y$ U6 L *( m_lpszImeInput + len -1 ) = '\0';
' ?+ y' {# f. M D7 m }; {* P! n2 U: S1 ^% R
}
2 J0 C/ ~! ^9 i7 k, x! R. d8 R% [6 j
BOOL CIM::GetCandidateList(HWND hWnd)9 h9 E8 |8 U" l$ o2 c# k2 e* [+ U
{
4 P6 B4 r8 S, x' ~; E DWORD dwSize; / T. ]! I( L8 G7 \0 ?9 q: d
HIMC hIMC;( _9 P9 ?% R. ~% \) {- S6 [* w
3 z1 N% \* o2 R
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
0 O% U& {7 a5 j+ t2 K! Y0 l0 g- P9 @. t- t& E0 V
if( m_lpCandList )+ v% l. [! S( j) J2 k
{. W6 _9 W3 P( [1 N M% r6 u
delete m_lpCandList;, J, ^- M5 \8 t1 o5 M( P
m_lpCandList = NULL;
1 n. _* o' R0 A7 u5 @/ w }
$ w- O( j+ d6 w% s! T3 b
$ P* I! O, z4 Y8 Q if( GetKeyboardLayout(0)==0 )% z* p9 c: a0 n; _9 @7 V
{; [( v9 Y! {& m$ v& y" O! e; X; A5 w
return FALSE;5 X) l' l' z" _% E$ S S
}# @$ ?' m) i7 B3 f: [
4 L" \6 V. T2 j) f% l" Q1 ?" T, O" d hIMC = ImmGetContext(hWnd); //取得输入上下文5 r7 J6 P$ \+ m* W1 ]
if(hIMC == NULL)! l* |# j! z+ O4 [: l
{5 W7 W; z* z4 J j) T! } {. V+ L6 \
return FALSE;8 K/ v& {, P* G/ }" `4 |5 {
}; H' t) F2 ^3 |0 P! S+ I
" W& P1 R- ?; m8 x4 n ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
7 ]" A( t6 w0 a' Q if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) ' e, h8 j6 L" }
{
' Z' s5 Z. {8 P& \: X7 v( X" f m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
{1 N8 z( _- o6 t if(m_lpCandList)
1 d3 b3 I1 c8 h o {( i' S0 [+ e# s Y' \; ~& N
ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
3 p7 S& H: Q* l5 f% c: w/ L CandidateToString(m_lpCandList);) x0 Z% H% o$ y. A2 F4 O: G
}
+ H. h' v, l/ k; R# ]& _; L }
O3 G: A1 j7 U2 M' f* F: o
$ f ]9 n q$ F: P$ Y9 o1 V ImmReleaseContext(hWnd,hIMC);
1 x7 ~$ T/ o$ Z7 s" @ M% m, Q; C. U8 V3 \" k+ y- q
return TRUE;& X4 S) \$ U8 s: F
}+ @8 x6 A- t" K I4 f L5 |
7 j; W) P5 C0 S1 M0 ^
void CIM::ClearCandidateList()
! e F7 B/ ]- x. X{
6 Y. x% F8 H5 h. s, u: e if(m_lpCandList)( b/ { I$ _2 W) L- x
{0 i* o0 x; G8 h% u% v6 R
delete m_lpCandList;
' d/ I; J7 _9 g/ ^& H9 C m_lpCandList = NULL;. f1 Z! u4 `, Q+ m# k4 S) S
}
3 h6 k# O y; a8 K( |$ q ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );# z3 P& p( N: k2 s: D/ I4 z1 V% w! @
}+ y# {$ g4 W, K1 B, X l* ?$ v
1 O& u* v, e/ b# Y' v* w& Y6 g
' v; ?0 `$ u4 O. w* ^6 KLPSTR CIM::GetCurInputLanguageDesc()$ f, n/ P+ O& m) S
{+ @1 I( T0 x/ S" G1 ?! s G
HKL hKL = GetKeyboardLayout(0); ' ?. Q0 `- x& ?2 J# z9 q
* I9 y+ ?0 @0 s) [! S9 i/ N% ~
if( m_lpszCurInputLanguageDesc != NULL )* m0 n7 x8 H& |( M8 x
CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^$ {5 @' _0 K5 Z+ R& r! D" c
8 f3 J: C+ i" j! C) g
int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
# ~4 u+ e' v. y. T; k" S- P6 i6 G2 X& h
CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
! S g- g% @, E7 I4 f2 [
) d0 r. w) [4 \0 F if( lengh )
1 S/ W% _+ T. \- @ {5 q4 F7 V5 c2 z+ J5 `
ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);. h) Z$ U( K& q: h- _* J( }% I
}
" d, B. q6 l* I B else
. P. H, W4 }5 ]: D {
& g5 \! c1 o0 R. P. I strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );
8 C" M! a8 @" E% W! u }
Q7 O: |! `/ N, k m9 V$ A& _, y3 w/ D8 o3 {: t. y4 s
return m_lpszCurInputLanguageDesc;. O, k0 u* b+ H+ v5 U# E
}1 g/ o5 _- g5 |1 O x
0 s8 S" U4 Z y# i9 |. c' f3 Pvoid CIM::UpdateShow()( I! j1 d$ E+ n8 s9 c
{
: o6 s4 F' R7 O' u7 t POINT pt;) G( b/ M2 p* e7 Q
pt.y = 450;
! j6 v9 t0 F* m* ]$ ?! J4 D& { pt.x = 400;
2 x, Z4 [& s7 ?5 J) g2 J; }& y8 @ ttffont.SetSurface( DD_GetBackScreen() );+ X; M& s: x! V! x* Q5 w- T! u2 x
ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述
* B) l8 n* ~ G
& p3 N; D4 ~5 K3 m9 [* a( j* L3 v pt.y = 420;; _1 j: y5 ]8 u
pt.x = 20;6 o8 M& S9 ?: o
ttffont.ShowText( m_cCandidateList,&pt );. Z0 _( M$ z) B! t5 p2 J Z8 @" S* w
$ T8 t6 E, E; X9 {
pt.y = 450;% o! f8 K' F& \" [4 _9 { X
pt.x = 20;5 ~8 U; | }( t5 L. w5 ^- V
if( *m_lpszImeInput == '\0' )
. Q0 T+ N8 g5 @, k3 m Q1 e4 ` return;
5 K- r( C0 u0 H
: G& ]9 a. k' x5 h' v% W7 ?8 n ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字' O! [' @: H) } t* K p( ?- @
}2 t0 t. w/ g& G
: \) \. C/ v. w- \1 a
LPSTR CIM::GetResultString()$ A/ P; k. Q' I5 P0 l* F
{
* Q, u8 A6 O% X+ ]6 x) Q return m_lpszImeInput;
7 d4 X" O U+ t}' s2 j( M, o3 W* g
/ U7 g" C4 v7 i3 sBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)
5 p& z8 C: L( u O9 l{
# f. V' W8 I& ?5 O; x if( !m_lpCandList )( D7 W$ R; S% n! I& V; D5 o
return FALSE;6 z* g2 F3 G4 Q' Z; @
6 R8 |& o% b' e+ m( c. {
if( m_lpCandList->dwCount>0 )
N7 s6 Z3 v( s8 V% [( A+ i- i {
1 Z9 c% ]7 d& P8 R+ g0 }# l LPDWORD lpdwOffset;& ^& D. E' A, ]- w
* u/ _% `7 }7 X lpdwOffset = &m_lpCandList->dwOffset[0];
# L0 S: h0 ?) m; ]. J
9 b, r6 Q4 M: X0 h7 t) s: g) d lpdwOffset += m_lpCandList->dwPageStart;
3 Y" H! E( u% ~& d7 v3 m, {7 C& k" v. w* r9 _/ {
ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );4 G6 c- q0 ]& f( v- P! H7 c: i! ]
" x4 L3 K+ H1 }
DWORD z=1;
% c/ I: J2 E( A3 h( e for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++)
7 [1 N. e3 y& C { 8 a" S! f' U3 r
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;# ]/ e7 ^; i! n r! m! @
char buf[255];
$ q0 @' l! ` g! ], d sprintf( buf,"%d.%s",z,lpstr );5 T: _* `, M# s* @+ h% E
strcat( m_cCandidateList,buf );1 q# v3 M* Y% s- Y- }7 u2 T
z++;, Y7 r1 W: W1 b. S# c$ Q/ C# {; W# H
}
. Y5 k: L. g, C4 {. K- H+ N% O
9 s: ?+ B( i7 w return TRUE;% Y N8 ^4 D A5 j
}
8 ~) d8 f! t7 p! C' x1 q! B. p
9 r6 e) O4 `# T9 X0 L8 z return FALSE;8 A; e; s. _2 ?- U9 M8 N# X# a
}
6 q, @4 e" o7 h- B" ]( O. @
1 |* b! g. _! ^: FBOOL CIM::ImeIsOpen(); `4 H, L# p5 M1 T6 z
{4 v1 q; j. F& O! r2 h- Y
return ImmIsIME( GetKeyboardLayout(0) );
9 s! d$ Z. K6 w} |
|