|
|
//******************************************************************//
; k" @7 N8 I) k% X//
/ [4 u0 x+ O, e# f6 g// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家- ]4 R/ q: u, u
// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
* i& Q. C$ O# J W6 O/ Z// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net, ]; c W! h( P
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT/ s+ N7 V" S4 m9 ~' ~, q1 n
// 为显示信息用,可以用其他方法替换如 TxtOut() 等% z. D- e" H! G2 `; Q+ [
//, V( e/ K$ B8 r- y9 Y. @
//******************************************************************//
4 R5 ^) L+ L% x# ~1 ~+ P; [* c0 ?* [) \4 O6 g( J* a- b
//////////////////////////////////////////////////////////////////////
7 r2 }9 w! S* k. Y/ r//
( \* t# n; }" v( m: g" w// IM.h: CIM class (使用系统)输入法类
. F8 P/ v9 [9 u( h* A' T// 2001/4/30 Write by Jerry Wang/ M+ E8 [, q s( h
// 感谢大大鱼的帮助5 v8 f9 K) w, t, }+ X
// Need Lib: imm32.lib9 R/ [, l4 ^+ K4 |* v' v0 J
//
$ [! w; f; w; R6 C( ~//////////////////////////////////////////////////////////////////////
7 | B6 }* ~- o; D5 y8 n- B* X1 l5 U' Y
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)( z) a2 o0 @. L$ P( E
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_) U. k' V% d' u! v$ e7 h; {& K* H
$ s" D1 k. f+ ~: Q
#if _MSC_VER > 1000
# `2 M9 i+ s G: P#pragma once
0 Q% n3 C2 b4 S" \$ S#endif // _MSC_VER > 1000
9 \" E+ h/ o1 X) W$ b% \) o; X' ^% a5 u D Z! `
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数
& H* q4 M* A$ [! ]+ e/ h) f
, v3 |, o* Z" \) C# c" n! N#include "FindMe.h"
+ g w2 k& \, i: N# t
. [3 s8 ^# a1 a* p5 n+ V5 i; s, |class CIM * i$ P O; E8 F+ o
{" |: p0 d) G6 D$ I1 K; s8 p% k, @
private:
+ b$ Z7 u S- r8 q CTTFFont ttffont; //显示信息$ y4 j s5 H3 j4 R
LPCANDIDATELIST m_lpCandList; //输入法候选文字列表
: Y- P3 [: z4 ?3 D$ S LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针5 b0 E* y- R6 a' c) D9 V/ N2 e
LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针/ P& I B0 }& L" I( B9 O
char m_cCandidateList[255]; //候选文字列表缓冲区8 I- j/ m3 i5 C- X$ a, T
char m_cInput[64]; //输入的字母1 @/ d8 J8 N8 [+ U# ^
' b X q: K& {1 s8 U, E
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串. h; V; h2 G! x* g7 Y
( p% n$ Y" \$ x$ P7 P# y8 w& ~public:& f6 i) [# B7 Y( Q
7 f' I0 n- A: r# k; ]* e( N
CIM();
; ~6 I5 _3 V: M" K9 Y8 v virtual ~CIM();
% }) d1 w1 N2 j( y. L( C" f2 r( `, i" u
LPSTR GetResultString( void ); //取得输入的字符串
) ?/ O6 T; `0 V9 _9 N1 Z, D* }; a# J" A% W: [0 S
void UpdateShow( ); //显示输入法信息
9 e3 r( x( w2 J- v0 a; o& u6 t
# w' [4 u0 Z; z7 a4 g! v LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述( j4 X/ _; I, x7 Z
void ClearCandidateList( void ); //清除输入法文字候选列表5 ^. z/ g: P, U2 p0 t0 c+ c
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表7 e+ Z/ H9 w5 G+ N: c3 C
BOOL ImeIsOpen( void ); //输入法是否打开
, A2 C( {) |! Q( g2 z7 w& b void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息; J& N. E6 |- z" U
void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
; t7 Z' J H$ ]" M& o5 }/ q void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
/ g. H' L7 f$ ?( m/ [ z' k};% j8 v8 d9 z8 [8 [. j+ C+ ]
' Y q$ e9 b7 z0 E% L% v#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
5 m' T2 A8 ~8 N! Z, F: r6 Q! J1 k! i# K" [+ }! r) [7 y
# v/ O2 {" B, B" T' M0 [8 S
4 l- f% V0 q3 J1 Y% v2 ]+ T//*********************************************************************************************//, X2 K+ _1 D* s
5 n: X) q5 ] B( @9 W
//////////////////////////////////////////////////////////////////////
) g! R A, v' n, O H. f* A6 R//
$ N) }. C) g* D. B( B) V// IM.cpp: CIM class (使用系统)输入法类
/ w" e+ a& b' H) x. H( h6 C// 2001/4/30 Write by Jerry Wang
* Z1 x! \* D. J# J' }: M. X+ y// 感谢大大鱼的帮助 ]: Q, C$ d+ }! I# ~% R9 G0 o1 s
// Need Lib: imm32.lib: y4 z4 J9 `0 [8 R' O1 X
//
$ \& X: c. n8 k! W( R6 s//////////////////////////////////////////////////////////////////////: a( b m# s& ^. z. ]8 S/ c
7 V8 C& ^0 g5 @9 i# f: B
#include "imm.h"
% t x3 A7 j, V3 O" o0 @; v1 h$ _% m6 B/ E) |$ i" K$ u" I2 V
//////////////////////////////////////////////////////////////////////3 m9 N2 }' o% l! |
// Construction/Destruction) ^4 e4 }9 ^) ^" D" R; q$ _. ]$ s
//////////////////////////////////////////////////////////////////////
7 [( Q1 |+ n, J0 n, p$ g/ N' f( _: c& z" ]
CIM::CIM()
# t. A/ U# k4 K. P4 l% v{
; j. {6 ~$ I- K% L o& I A m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
9 Q. Q- V6 R7 l: ]9 Q ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
2 }& K. |; f0 b" I7 ]; Z *m_lpszImeInput = '\0';
# i, I& T! n. g! ~- x0 @5 Q *m_cInput = '\0';
6 Z) g" e1 B6 `& G( G
+ n' P! p3 v l8 W8 m) d2 t/ e9 S4 N ttffont.Create( "黑体",15,RGB(255,255,255) );! q" p3 T! R3 C. F b$ ]
GetCurInputLanguageDesc();
6 B( {0 H6 v. p; I# c7 W8 ^, O& @}
8 `# E6 T3 h, M! ^% y9 ]8 n- ?+ S9 {" @: p B
CIM::~CIM()
# `0 A7 }+ E# A& M9 d- m D" G{
$ b8 ^ ?- G! h! o$ k' R0 n ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
( T2 r; \, p1 P) C7 A5 e# _* }! F: R& Z# w3 w
CHKB( delete m_lpszImeInput );
3 k1 h: G2 S$ ~ if( m_lpszCurInputLanguageDesc != NULL ): q3 s8 s p. k* H) g
CHKB( delete m_lpszCurInputLanguageDesc ); 2 h5 S* [6 N1 P
}7 {, ^/ l1 W, D1 z' c
2 g1 g- {* `5 Jvoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
9 ?0 N, q/ A+ E5 V6 I{
, h0 z4 B) J |( W4 U( Q if (lParam & GCS_RESULTSTR)
- t; L0 L1 Q# T O {3 G1 Z# J7 f. E w# j0 D9 h: P
HIMC hIMC; //输入设备上下文4 r% l& R! N6 m
DWORD dwLen;8 D' D) ~9 T& }2 f, v
LPSTR lpResultStr;. E/ U% }5 {: g
" h" l6 s S( i' k/ V
hIMC = ImmGetContext(hWnd); //取得输入上下文
: e! v# X6 v6 f: G1 r$ F6 ~3 d
! ?. ^$ i4 ~2 E; X/ r6 `, l if (!hIMC)
! _0 |2 ~7 ^# P7 K/ _" {( @; O& e$ u/ G return;
& U5 C8 K c8 U, q( L/ m' U
8 v- J+ r! G( n( @( c( Z dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);( l- v6 S- q/ j& f
dwLen+=1;
$ i9 @3 Q' N" W9 o8 T1 \! {! l: ^; n) j) [
if(dwLen)3 o% H2 J3 M) P n
{5 [5 v" a7 j" T0 l
lpResultStr = new char[ dwLen ];
, ~% X- S9 i- G' [9 W/ E0 i9 l" `8 b& Y2 H9 ?. V
//// 缓冲区已经满了7 A; a* Z0 T, x' |4 `; Y6 j* H
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )
7 A4 G5 d5 [% ?' N {) D4 ?" G! D3 n* c: V
MessageBeep( 0 );+ a) h Q( F; u4 |% b) ^
return;4 c$ N6 A' _+ [& Y) J1 r
}
5 d7 |' g/ H$ K2 g( P5 z ZeroMemory( lpResultStr ,dwLen );
$ k* p- Q7 m z if (lpResultStr) D d1 e( X" O X: }; y" b
{
* Z& ^$ H. s; l6 D ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
! ?' I! O7 f6 `* X/ G- h strcat( m_lpszImeInput,lpResultStr );+ n3 {: x% J& p, K0 O1 }5 i' y
}
0 F& w" v1 X6 S( { delete lpResultStr;
, O$ X9 x; h9 p- J } h" j, |$ M8 T: B$ \) Y% `. d P
' V7 b2 N+ w" d! t# @ ImmReleaseContext(hWnd,hIMC); //释放输入上下文6 b6 x- w H; j9 C
}
$ U/ I3 h5 k/ O% K6 d" \8 K& v' }# R$ e4 V3 ~
}
: x: s, ?9 l. h( @4 c& y5 v6 u# n1 c3 @: F& U6 y
void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
$ n" O, y- s" j1 n{
( f' u1 Z/ {2 p: l: K8 Z DWORD dwCommand = (DWORD) wParam;
( r/ `: X- p5 m7 z( |2 z! ~1 K switch( dwCommand )
, p# x* |+ ~* ]. j: U7 R& O {" j, }+ o6 N6 \9 J/ |
case IMN_CHANGECANDIDATE:1 @0 a, n) ]: ]! q9 B
GetCandidateList( hWnd );" c* |: F& ^0 M7 _
break;
1 @9 s& y8 J. R. A% j2 n% L- x" y% Q/ G8 Z1 K ^4 F
case IMN_CLOSECANDIDATE:
' F t; q; I( G' ?0 @: k ClearCandidateList();2 c+ E+ a& `1 D9 R
break;
6 C& X5 g+ K# w/ a/ U$ P
- r B$ q6 ^1 s8 M6 T7 R case IMN_OPENCANDIDATE:4 j0 [. n6 W* s* ?* H
GetCandidateList( hWnd );
' E' ~$ o% d- C! o( D3 Y break;+ Q! k4 A5 z! P8 ]* t, C
}
: E) Q6 y7 e9 M. d2 z6 W% d! z}
( z, r1 r- X- i" `* e$ Q9 V+ \+ `, D$ C* L! K
void CIM::OnChar( TCHAR ch )
$ {. H- x7 p, e! p. r{5 J* P0 [5 C4 y
int len = strlen( m_lpszImeInput );
4 J* v5 Q, P$ I& O" o" r
1 b( J$ A T3 g- b; q if( ImeIsOpen() ) //输入法打开状态! x* F9 [' r2 E! m9 j
{3 G0 J g. F8 z3 h6 O f
! N# C2 W( {# K" |8 L% X }
* @) ]+ ], P" v3 n) J I) h else //输入法关闭状态
$ |; u* U/ x! m( @8 j+ U1 Q i {) {# C* k! h& O3 @, f
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母$ @- c# l* R$ i" { r9 d% C
{7 S$ W. f6 H5 Q
*( m_lpszImeInput + len ) = ch;
$ y% h3 r5 Y' l+ |9 u6 H$ U *( m_lpszImeInput + len + 1) = '\0'; x6 i3 J! M( I K8 K6 j/ D; N
}* a. c. |% e7 L" ~
}5 r3 ?4 H4 p8 K& _
$ u# c% x3 F$ j) C4 a- t, _
if( ch == 8 ) //BackSpace字符& e4 L/ h% c) I8 h& Y
{
: ?2 u1 Y" z. I' T; T/ ? if( len == 0 ) //字符串长度为零
7 {3 m. T" l9 U3 v* e& h return;- m- F1 O+ @! l$ ^( y4 B- a
* a( c4 g H6 r
if( len == 1 ) //只有一个字符: f6 w) q2 H0 p0 j
{
1 ?7 B7 [% \- ^: o5 ^* X) r/ w *m_lpszImeInput = '\0';
* E: i- l% n" T& J1 I return;) |& u7 s$ h+ P) j1 ^2 i
}+ r& Q) W1 m9 c9 c
9 L1 o9 i5 |# u, ~' r: O) |$ P
BYTE cc1,cc2;
% E* c# H; U! d* J cc1 = *(m_lpszImeInput + len -1); //分离字节+ ~1 D* e# n4 {; d; F# S% O$ y3 s O
cc2 = *(m_lpszImeInput + len -2);
* W: V7 Q$ N) Q6 n& O
% n9 L7 q% P9 p if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
8 T6 o6 h3 g" P$ x3 S *( m_lpszImeInput + len -2 ) = '\0';8 a% g9 i _" K5 \
else //是英文字符(单字节)
' f2 p0 F% n. y9 Y! f* {% H1 s# p; d *( m_lpszImeInput + len -1 ) = '\0';+ a3 h+ M5 _- H5 L9 ~: Q
}2 A3 q: y* \4 \/ i
}
1 g+ `/ v! N9 w6 M: @8 h* R4 s9 B$ s5 m$ R
BOOL CIM::GetCandidateList(HWND hWnd)6 l5 u* w' k4 }# t# Q
{
2 |4 C8 g) C0 |5 j DWORD dwSize; 0 p) ~! y* X+ x1 T- g! J
HIMC hIMC;
/ T9 w8 H; O8 d4 [6 I# T- T( D% w- q
0 i( A. H3 m; P7 \ ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );- k1 J) Y& B. J2 [
7 Y) q/ ]* R: c$ B if( m_lpCandList )3 S( q8 `; K1 O$ ^$ r9 I
{
# _8 e: U8 Z6 x0 l1 q+ P1 K0 A delete m_lpCandList;+ m N" o" R6 ?4 a$ H) m
m_lpCandList = NULL;
0 o! T C: c, n3 z5 n9 S) [ }
" E9 Z+ n/ f+ j$ }8 ?
; l/ H& Z' \( W if( GetKeyboardLayout(0)==0 )7 K9 g* p3 `3 t$ ^9 ~" ^
{
, B2 T) U! r k1 H4 h/ ` return FALSE;, j1 \6 {1 o8 U0 M
}
6 z! L8 {9 v/ f6 i4 C% f% d! j: q2 g2 b2 J; `# r
hIMC = ImmGetContext(hWnd); //取得输入上下文
$ e" a" c" m( R; u if(hIMC == NULL)1 Y. V( G" b# j% p" d
{6 ~' V. e" Y( T3 X4 V" c
return FALSE;
2 [* R* [( X' O5 j& [ }8 \9 C* c0 x! V" A
- o- O3 g$ m' ~3 G
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );' a6 E- j# T4 ^# _
if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0))
( Z; x& W3 H) d& u: t4 ~$ A* s2 m {
+ e0 U) J/ i( m m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
+ S3 x9 s0 o4 f& c& ` if(m_lpCandList)2 y) r2 ^! h' M5 V
{
/ O* M: _4 ^; n" \9 O ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
# N' b1 [% w! C1 t6 Q4 i1 @ CandidateToString(m_lpCandList);8 M4 w; F/ x3 I* B" v/ `# h
}
2 L; Y6 o& g+ c6 y; \ } 4 [) a% G9 X Z2 c. o' T: t
! b) B, G! l2 y( N
ImmReleaseContext(hWnd,hIMC);4 G; g- [( x' t7 ?2 }) I
; h9 i6 s( i$ E$ r
return TRUE;- b$ g* Y5 {1 B1 I
}( g4 v# ?6 P! l) q5 H
5 N1 {! |1 D4 ^; M, `% P- Uvoid CIM::ClearCandidateList()0 b9 a' r$ S" T, B
{
- v5 @, t6 ]) a; j/ x9 c! \5 Y! S if(m_lpCandList)
6 v5 @% P8 u" |( x% `" l {( L) B: r5 s1 A' u4 G# a
delete m_lpCandList;
# {( U# U. t+ A, H0 c2 Z2 { m_lpCandList = NULL;
9 z2 }5 Q9 n( g2 i: r }
( K) u4 M) y& v- G2 d, j ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );
7 U! A8 y% m1 G$ C}3 T* w" U2 X! K$ }/ a) ?/ N
6 v( D5 H9 G0 C+ P; I& i! V+ I( Q' C4 Q& C3 \6 `
LPSTR CIM::GetCurInputLanguageDesc()
% X/ x, \- c+ t* h{
2 d5 y8 n( H8 |4 c9 C HKL hKL = GetKeyboardLayout(0);
. q+ t/ o. F; K1 _& s* N
" Z! K0 r% i/ H# N% V+ ?- u! R if( m_lpszCurInputLanguageDesc != NULL )* { L9 {) [/ q9 p) |
CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^, k2 h6 X+ y) r
3 f' U5 U% }1 x
int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
) U$ O+ y( C2 J1 _9 O$ p9 Z. j
& s' e. X$ B) @+ D v! l CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
7 F0 G' O4 N5 d! ~$ Y/ b! y. w, x! w, o- D' p, Y7 G5 R8 [1 A' M+ b
if( lengh )/ Y) q- y( o3 y" Y! T
{
" L1 t, c0 c0 x ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
4 _' R( C: P1 f }
h3 ]+ @* B0 T; v0 _ else
$ x* F3 G+ P% e. ?6 J6 Q4 E {$ W4 U% q: M# _; }
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );
# W8 \* N' d9 D# ^: w- C } }0 t6 ^0 c6 l; C( Y) J% G
. N5 ?3 g5 V% ], G+ W return m_lpszCurInputLanguageDesc;
+ x4 N; C) y* k: e- R' ?, l}) C, M0 @9 q) F$ h5 q
- O4 ?* ?0 G$ h9 f3 ?) t' g3 U8 l
void CIM::UpdateShow()! K; z# b6 u; U
{
; e0 X: }2 W2 X9 o' i( L4 ]1 x POINT pt;! u! W0 p4 _* W( V8 R
pt.y = 450;
7 ~" x$ e& K$ U( {( o pt.x = 400; ; n& K: k: x/ ~# T& l
ttffont.SetSurface( DD_GetBackScreen() );
6 T" ~! Y, D0 e" p ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述9 o4 l( t- o) Z2 |/ X$ I
+ E3 R# G" s% R ~ pt.y = 420;
% f: Z8 A# i9 i pt.x = 20;. p2 [3 J6 w( G1 V, A7 x; ~
ttffont.ShowText( m_cCandidateList,&pt );
' @# p1 _+ X$ i/ `3 K' H( a; a/ {5 @3 N3 E) s9 Y, W' _& L/ g
pt.y = 450;
# W0 Q* `* V2 ?$ O N pt.x = 20;, D. {- |' @5 t- ~( z
if( *m_lpszImeInput == '\0' ); N5 `/ K" @( M3 d( [* {
return;/ @7 Q7 C9 |+ p& n$ J3 X
: D2 e# x( S' U& g ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
6 O G3 d0 W, B' d B* z}
' f7 _% A" ~0 b
& ?" b: Q) P% f z" U- {, ALPSTR CIM::GetResultString()5 Q" X& s' G }; u5 u
{* A# e F. [5 _7 O* @
return m_lpszImeInput;, C' N3 X+ A: Y! \
}5 [, U- n/ o9 \# b; {% q. \
6 A" [7 t& B! `( r2 MBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)
0 O# t2 Y$ W* I{
4 ?2 \: q: T, u o4 U. B6 ` if( !m_lpCandList )
1 \2 @8 X; E3 ?. m H3 E; k4 o! O% s return FALSE;
. R* i. b" {& p7 m$ Z; _
3 ^2 \! {; k6 \" ]- i, R+ S# F if( m_lpCandList->dwCount>0 )
) w8 k; n3 U+ ], z5 g- U9 V {, X: ]& d6 w; f8 d9 L/ C
LPDWORD lpdwOffset;8 i0 V2 V( ~9 J* o
3 k& H& g3 I' ]6 _1 F7 D& w
lpdwOffset = &m_lpCandList->dwOffset[0];0 ?, l0 ^9 T* F$ ~9 N. j" c$ L
% }* H% _0 b$ R. e. m/ o5 j9 ?( x lpdwOffset += m_lpCandList->dwPageStart;
* z, R( o0 R. v, \ Q: J0 W
( [0 \0 Z* b0 X2 M1 y! W ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );
+ G6 E& y5 z4 J( ^# f. `
2 p8 f. A% g1 O" c/ W' J DWORD z=1;6 Z. e* K- m7 y; [) `' l
for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++)
) D( X4 G6 V# L& u {
' l) C5 G$ }4 _: A# H LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;
* ?& m. F e" g1 }- Z char buf[255];% Q9 z+ ` y" L; k3 z
sprintf( buf,"%d.%s",z,lpstr );, Y" S. n7 r1 k7 w; e
strcat( m_cCandidateList,buf );0 J. K- H N7 O
z++;
; r* M0 S% r7 h9 }7 d" l5 _ }
O- A% ?& S& O% z( P: }* R" A; J6 J; I+ A/ P9 d4 R
return TRUE;/ Q: W7 A5 U7 c8 O% b- j8 f; S( x# p
}/ z" B7 D4 z9 z2 M; z
; p S7 t2 X* }# E
return FALSE;
; p( e0 d' k4 }% Q7 F! [! U}
3 p r/ ]: H& \# e
& w r( y8 n( t7 c( n! d* n$ q. U- uBOOL CIM::ImeIsOpen()
: n( y9 @0 X& B2 L{8 T$ m0 N6 |0 W6 T" a6 _! m
return ImmIsIME( GetKeyboardLayout(0) );9 j- Q+ z2 f8 U* B) R
} |
|