|
|
//******************************************************************//
3 l6 t8 c5 Y2 a/ e5 |& U//
. o* L9 W$ h5 D& P: i// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
- {7 `: O0 {5 ]" k) r// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
# K y5 \( r. x! ?7 o) q// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
8 V) \7 X0 ^% _# |/ r! Y+ d# g, t// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT. Q: @. @8 J9 a$ y @8 V- P# A
// 为显示信息用,可以用其他方法替换如 TxtOut() 等
& S9 V4 w6 ?1 K//
/ n3 g8 y r! V2 s2 i5 _//******************************************************************//
( I# _2 _0 W: e: V( `- t$ o
4 E8 g3 J! r9 L& T+ v//////////////////////////////////////////////////////////////////////
- q( X! Y* @! h9 j//
$ u/ ~ X1 m" Q x6 y// IM.h: CIM class (使用系统)输入法类
2 o9 V9 `3 ?6 j5 f! w. e// 2001/4/30 Write by Jerry Wang' f* I2 L* D v1 P0 s2 ]
// 感谢大大鱼的帮助
" c' h N- @/ w, d! T// Need Lib: imm32.lib
. I8 o0 n4 S& u! w: F6 I2 r//3 V5 E. V9 D" r% f( r0 L
//////////////////////////////////////////////////////////////////////: Z& _ f- v/ e" L# w }
3 a) ~0 [. \; p$ X
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
0 a, b4 g9 l0 t7 O#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_/ W- O: Z$ J2 T6 i( z
2 j1 z& ^ Y5 Q" V" D1 J/ R3 w) R#if _MSC_VER > 1000' O( X6 W$ b; r S- T
#pragma once1 b( F; k1 u2 e% V& t- A5 p
#endif // _MSC_VER > 1000
- ?5 T6 P9 T/ W$ u+ y. N7 P* ~3 A0 m
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数1 }3 I- k+ o3 t/ H. K
4 } Y# L& G& u5 M4 E/ F
#include "FindMe.h"7 \6 x! [& f- E% U
0 a' N$ \( U- @3 f
class CIM
: { Y9 e/ A: n6 T* \9 x! {{/ }7 b0 t& X% u: e% q$ p2 B
private:
) ?6 P! J2 B) F1 G4 c CTTFFont ttffont; //显示信息
! ^+ D( F) F( F LPCANDIDATELIST m_lpCandList; //输入法候选文字列表
; w$ l! z% |% ^8 y# H7 M) z( K5 {' M LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针+ U) o& y; }, ]! o) P- A
LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针! e( F6 ]* @2 K* y4 k2 A
char m_cCandidateList[255]; //候选文字列表缓冲区
4 }* G# o; `8 e# _# Q% s char m_cInput[64]; //输入的字母 j+ Z, Z( Q! f2 y+ W1 v( ^
! w# L0 B8 H: d' N8 z BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串- W" K, T+ C. V4 j# w
) D W& k, \7 W# c+ m6 F& k
public:: I6 k' y% j7 W0 L) q4 c! w; d
& l5 f: g5 _( x CIM();: u$ i D+ X V) ~/ ^# i
virtual ~CIM();2 c' D6 ?4 n7 K* f8 m( d, \
# q; e3 E9 G, K' f LPSTR GetResultString( void ); //取得输入的字符串$ r) d8 V/ [$ O% S" j5 Z; a
8 ]9 F2 R/ h( H) t5 f2 S/ f void UpdateShow( ); //显示输入法信息( f/ [: K# \5 C5 s U) d
% m( w8 s2 c4 U3 H4 F# H LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述1 Q" Z" L% ?4 k1 o
void ClearCandidateList( void ); //清除输入法文字候选列表
4 P5 s2 p* H) {2 x7 S6 |/ y% D/ @ BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表
9 ?$ j7 d+ H$ | C& Y* s& I) A BOOL ImeIsOpen( void ); //输入法是否打开
% l$ P- Y+ Z! s \& d void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息& Y1 {: q4 l/ q( f8 p
void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息) S9 U. h7 P. A0 J% _. W* o L) ~5 p
void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息 l, {9 w/ F- W' c; _9 z" A
};
1 C! } d9 E4 a# B* ~( v2 A. F/ [+ k' P$ ?
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)2 F% ]* I9 V* J1 y0 m* @6 l
' }/ v5 ~6 f+ r' O6 i' N
5 L% M6 M3 `, w; z$ h
7 W1 T5 u+ W a* ]) s4 a% k: c//*********************************************************************************************//
& v" }+ \8 e$ V$ u0 P+ j- m3 R9 `" R& f
//////////////////////////////////////////////////////////////////////
/ O T1 I' @/ E//
: i1 o6 Q9 M3 }8 [0 [; b( b// IM.cpp: CIM class (使用系统)输入法类
; t$ y0 p; v$ N/ _// 2001/4/30 Write by Jerry Wang% r. ?; q" E1 r4 A7 X+ k; x
// 感谢大大鱼的帮助, b- l: q# \* n0 }
// Need Lib: imm32.lib0 @& h* f" h4 |% ]
//2 y7 p8 q( }& v! B
//////////////////////////////////////////////////////////////////////
1 j0 ?9 H# P+ C( ^. y
1 `6 e; S" T% q; t) P' e+ U#include "imm.h"
' r% I; P" p0 s. t
0 l+ Q# C' d; ^. y2 t' X! y1 @//////////////////////////////////////////////////////////////////////: j" [5 E8 l2 h8 ~" b" U
// Construction/Destruction
' _) K% m7 c& Y |9 t# f' `% _//////////////////////////////////////////////////////////////////////# }3 M* d' r' l0 V0 e
% Y$ y3 F6 j9 ]
CIM::CIM()
7 b% |/ l7 t8 W0 C5 z{
R$ ~! X }! e/ h w m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
7 X' T: S& y: \' f ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );+ }/ @0 [& V* n( z
*m_lpszImeInput = '\0';0 s) C1 C5 w' l2 I m. k
*m_cInput = '\0';3 Q7 b0 b, t7 A1 }( l& m9 M
5 H% ~# E0 g# f- X: T, y$ `2 W- k' f" [
ttffont.Create( "黑体",15,RGB(255,255,255) );# v* |* T3 P. W1 p$ u
GetCurInputLanguageDesc();& u" x' i6 o$ J5 l
}
3 S# C' T* \0 b# l6 C" H* b5 V( R4 t \8 F, w2 l
CIM::~CIM()
, ]) P2 S6 f0 ^1 T: B7 ~{
' t6 S. l- Q" R) e( ?/ _1 e( n& m6 F! e ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
' e+ B( R" d; ?
+ A; a: j2 n2 o6 y n CHKB( delete m_lpszImeInput );
" J% R7 F% q4 _( x( | if( m_lpszCurInputLanguageDesc != NULL )
5 v$ B! q0 c/ z% {4 l4 d CHKB( delete m_lpszCurInputLanguageDesc ); ' S0 n+ ]/ y1 p* z2 q
}
9 m( }3 I/ x9 P+ n/ C
& B# f, b, e7 qvoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam)4 j1 G$ F+ n2 ]+ D3 I
{$ `9 z5 ~( u' _; Y, k+ V& ^7 L
if (lParam & GCS_RESULTSTR)0 I& \' J9 V$ K
{. H% I; I% `, `3 z; W1 H* I/ k
HIMC hIMC; //输入设备上下文
7 U6 W! a8 v# T; H( o9 `* s DWORD dwLen;' G9 }) K: U8 B O- u* y+ t: I- d
LPSTR lpResultStr;
, A, i" h2 p, U0 |- E% ?
' R1 B; k9 S4 Z+ z hIMC = ImmGetContext(hWnd); //取得输入上下文3 m7 c: k# Q# G2 t# }
2 Z$ A2 Z% |& H- w
if (!hIMC)
1 _: ?4 X& ^9 \" M- v return;
% [/ O O5 d& f" ?
; L4 g( [2 \# }4 c2 h. } dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
. k" ?# D; ]! v8 D dwLen+=1;8 H+ I" W; g, |% ?8 ^" S0 [
) W' W/ d) _, {: x8 q* a
if(dwLen)+ v0 N, q/ g1 ^6 k' ]' }
{/ I$ x8 F$ U% T& w
lpResultStr = new char[ dwLen ];
$ ?6 a, P5 q. y/ y/ `
0 ^2 u2 q) i% r9 W //// 缓冲区已经满了
( x$ C g. h, g if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 ) F3 w# S2 D- ^; {
{* D% v2 L7 D) K5 ~5 \
MessageBeep( 0 );$ n; l0 n1 O$ `( i! T- u- k9 m
return;, ? [, t- B% J p
}
2 ], l' X9 p: @% ~' r9 w ZeroMemory( lpResultStr ,dwLen );
2 ~* U- C! E/ Q8 Z. j+ v if (lpResultStr)4 `9 N$ D$ g( E5 B$ ]
{: c/ y/ \* n0 q+ ~' G
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
+ [4 ]. M+ h5 y' ^& c2 U strcat( m_lpszImeInput,lpResultStr );
4 I$ t7 t- M& \" ` }# @, L# z! y) c4 p1 V5 `( `0 s
delete lpResultStr;
( \' {$ _. `' r* e" M' p! ~( K }( V1 Q0 K5 M. P3 w; M
- a2 x, p l8 }9 g7 ^. R. _
ImmReleaseContext(hWnd,hIMC); //释放输入上下文3 V- l' U: s# r- p$ E# c. a! e
}
2 F7 o, y% u Y8 o+ `9 `/ ^9 X% v( a5 N) C
}+ b, Q, X! d# @! \ m3 }
h1 n: X7 x3 `' S
void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)% a' D( M0 [. g/ o& W# V, }. w
{
3 B2 I* p+ }( [2 @ X+ E7 F* m$ T DWORD dwCommand = (DWORD) wParam;4 r' l5 o7 c- w2 Z/ |( s
switch( dwCommand )
) K1 B( A k2 } {
9 o* C3 t* S) y" v. n case IMN_CHANGECANDIDATE:
7 y; a, I5 Y, V$ O, j GetCandidateList( hWnd );
% ^7 h& f1 B. C+ Y break;$ G& a& j+ q2 a% y, L2 J3 `' w
3 O& u/ B9 ^% U1 ?6 O) A6 Y case IMN_CLOSECANDIDATE:6 _" H+ h/ V5 m- ^8 {; G
ClearCandidateList();
: y+ N K) J+ ]& @9 W break;
" e* A1 v/ _ o6 h* K6 u* u: U9 C- |: N+ t: t
case IMN_OPENCANDIDATE:
5 d# W3 v {! @ GetCandidateList( hWnd );
: Y6 k; [- r% {, V break;
( y( ^8 r! ^# `( Z N! [& w- c* s3 u }
3 @) e: O8 Y3 `1 @& d0 E3 u5 E; I}; w# w+ u" u7 ^) x+ m
* k# n: |+ r1 e
void CIM::OnChar( TCHAR ch )
2 M8 g8 }! @/ z; _- h7 R{4 W. S2 U2 O, w# |) Y4 |, s
int len = strlen( m_lpszImeInput );
* B: N G0 ^2 a- j* W2 w
1 S; G) \% `, ?9 ^3 S8 D if( ImeIsOpen() ) //输入法打开状态/ [* R v2 @+ |2 R
{
2 ~" N( H: h$ Q( u. B {) I! w1 s! D9 B
}" y# ^7 ]- i3 m. y) d2 X5 d
else //输入法关闭状态" o8 A$ b: U A8 `. t0 E& e
{/ k% w: j/ G( W+ P" X
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母) a5 A- x* s" p5 P! f
{& H# i$ _, c0 t! f+ E" ~6 D
*( m_lpszImeInput + len ) = ch;
6 g( l; _5 x+ G/ O. z *( m_lpszImeInput + len + 1) = '\0';
0 \, i5 q% e9 g7 r, P6 T }
- b" j6 V3 H8 ~; P3 m }
9 i2 t- W& ~8 H: G
1 t+ l# R. b: _! b) e: k if( ch == 8 ) //BackSpace字符, t& r" W C+ W. O2 m* ?
{ G* C: m! _- |
if( len == 0 ) //字符串长度为零
. P6 J) z+ C( f* v$ n# K return;
. M. o( k2 G, M. O9 ^$ A
" A" a2 N4 {1 A# b! t* D$ n if( len == 1 ) //只有一个字符
7 C) B( F4 i8 F0 A# c$ ?( P {
6 V+ y* M+ ^' O- [" I *m_lpszImeInput = '\0';7 s ~5 A! f$ S' e5 ]# s* V- _
return;! D* }& H. R# s: B$ R3 h- t# {4 d
}
5 D/ m4 {$ i; r" m
# D% F0 \ C% t) g! |$ k. ] [ BYTE cc1,cc2;/ T8 r- i9 C& q! _
cc1 = *(m_lpszImeInput + len -1); //分离字节7 m3 p' e- o5 Q4 S) ?( n1 }4 e
cc2 = *(m_lpszImeInput + len -2);! m: o& p: V* Y) I$ e
$ ?0 j9 ~4 o3 z
if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
+ N6 g& G, v. }5 H *( m_lpszImeInput + len -2 ) = '\0';7 h& ?2 @/ @, s/ O0 P$ t
else //是英文字符(单字节)% f: |# b! f6 Z, `% I1 G
*( m_lpszImeInput + len -1 ) = '\0';* S( m( a; n/ }4 b" u* F1 p! p
}
8 O7 u7 \! r5 h8 H5 C}, X' n9 A# _, Y2 m6 h
. E$ A7 W# ~4 @! Z
BOOL CIM::GetCandidateList(HWND hWnd)) H% B1 _: Q8 p: e
{$ L+ s( `2 ]- M% N3 l N }* t6 }
DWORD dwSize;
2 H, K) `/ L; P$ N9 B- S HIMC hIMC;
4 w0 v- T' O2 C; ]! D* T: y6 C, W& b" l* _
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
\4 m, \* c; R' c/ v
1 _; J4 \" d8 g2 f2 R if( m_lpCandList )
4 I- A L% P4 `' G- Q% k {
4 `- t" l" }$ K, X& s- f5 ]* o+ P delete m_lpCandList;
* P. I* L" Q# s6 g+ e& {* f) [ m_lpCandList = NULL;
3 D+ M/ S) T8 T4 q2 L1 Z }1 ~! x% U5 r6 |2 O+ s" l8 Y: E! L
4 Y/ m7 L. K4 e1 g
if( GetKeyboardLayout(0)==0 )
, ]+ V& w: Q; X2 T {
& P6 B9 ]+ V" i) Y5 c; t0 p. d2 y return FALSE;
+ `6 Z7 w/ a# G! u }! f! s& H$ L( L6 ~, l$ \7 a
5 O. [* b" F+ O/ W
hIMC = ImmGetContext(hWnd); //取得输入上下文
: w8 X3 n4 e3 Y+ S if(hIMC == NULL)
4 n; E8 m5 d# m0 V7 @2 l9 n h: Y {
; a0 |2 A# [6 w1 _ return FALSE;
0 k( L q+ P( B! d0 J {3 h0 v }
2 Z+ i3 ]& d1 r4 o
0 ?" `# ?# [: ?+ @ ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
' M: e5 T. L' J; V if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0))
' E! X, w0 u% T" F9 W {
8 a1 U" K2 X! E: z! P3 J/ t+ Z" z m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
) z* F7 Z/ H( X( r+ e if(m_lpCandList)4 }- k H. N0 k4 [
{
1 A, d; |! L! [' @" V3 L: q. { ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
! x8 l- ?* Q" g2 c! u CandidateToString(m_lpCandList);% Q( {* M9 O( k) `. f3 Y* A
}' x' t( B* c7 @" }" o( q& X
} $ m( H4 Q6 b9 }4 e8 y! W3 X
* X7 G8 ~5 {* k1 g# u+ w U ImmReleaseContext(hWnd,hIMC);, |7 p# }- _ K. W
/ p: K+ w. C7 K7 U return TRUE;
5 K/ S& G, ^5 L! v}
5 n: S: l) h& y$ z: q9 u% }0 Y6 X
void CIM::ClearCandidateList()! g) W. r+ K8 v& R! C; L+ f
{1 W5 {' V( N% ]1 x8 S& {* ?
if(m_lpCandList)
# t( D3 P1 v* T {
& S, J+ ^2 V/ @9 _4 @# U* S; } delete m_lpCandList;
, K( ^# b, V' D$ C3 A. C; u m_lpCandList = NULL;, ?" |" C' v0 A
}) h" N3 A- S* @4 J7 K3 b2 o
ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );6 K. H6 o2 ]2 C* l, _
}
+ s+ E4 t4 R4 ` Z; J8 Z- h
. I' `5 m M9 O* R
7 H+ g! ^7 Y3 n4 c3 Q: u3 _LPSTR CIM::GetCurInputLanguageDesc()- W8 o' ^3 H3 q8 c1 k b
{
$ c4 e" N# i* ~7 M# B3 y2 J& \" @ HKL hKL = GetKeyboardLayout(0);
0 L f9 T9 h& I* a; M! u, G i, G! g8 V1 O2 E
if( m_lpszCurInputLanguageDesc != NULL )
( [$ n8 w$ |0 y6 B' j% I+ V CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^4 E' B5 k }7 e9 F- o
! F: `- O( R: P: L# d int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
& ]* X: k- A, u
: n+ S# n x4 K- ` p1 E- r CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
+ T/ T1 R2 H9 M/ M
4 G& R5 c8 v/ \7 t. H if( lengh )
: s7 V/ C% K. p+ A1 o- g+ { {( p! ~1 v* ]* r# E, }
ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);# W9 P! ]/ d* E p, f
}
# s, n9 S" ~ q. v) o else
& ]- q+ ~" H% m, z( N( {5 Z {5 w# q2 m& M+ p6 h. F4 _
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );1 Q: g* X4 V: ^+ J/ S. e. o: t
}
' o' h4 W p8 x2 q" }5 [6 N1 t0 p) d
return m_lpszCurInputLanguageDesc;: ?2 B" N1 ]) W( r
}5 g5 M9 k1 Z+ k0 w
3 \/ {) A9 H& k1 d; ~3 ~7 Fvoid CIM::UpdateShow()' z& R4 i4 z* ?1 R& J
{3 f. u! T- y0 X3 g$ X$ P; Z+ X
POINT pt;
# L; ?/ J; h. a8 e, X" B pt.y = 450;
1 q! {; x+ ~ w+ N/ Q pt.x = 400; ( v1 q4 ]; Z8 _2 ]0 c. |' ~
ttffont.SetSurface( DD_GetBackScreen() );
' c; D- V4 V% ?* p3 H ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述/ c" [ b: T3 I$ L- S: g8 o) O( G
& G1 J4 T8 {2 F' C7 `+ k9 f pt.y = 420;
! ?; a% \' R, G) s pt.x = 20;
2 m- l+ Q" Q* E4 H- L- z4 g ttffont.ShowText( m_cCandidateList,&pt );
& s$ H% q; _9 D# A( Y
0 ]+ W1 b" P# U+ W. X# O pt.y = 450;; x4 a" x5 M' _. y2 t' }
pt.x = 20;
$ t* s5 L+ Y5 t: v) D# v9 g if( *m_lpszImeInput == '\0' ); v6 U& T H, d" P
return;
1 D4 ]& |7 @" N# E8 v% B
/ P" C$ l" h: M u. w1 g9 w ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
8 A% P+ D! z7 L8 E' S+ _' n}! P5 s. f% ^) a+ q6 V
3 B! f; H3 \8 E2 u4 J. h, Y
LPSTR CIM::GetResultString()
1 v$ `' i4 w f, G, a# @6 G{
; I: W+ |' w- }9 z return m_lpszImeInput;
9 E# P6 I8 a) H9 E1 z5 j P}4 K6 V/ c3 v2 k- ^
2 |0 Z" y/ U. ]7 z9 }BOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)
+ ?9 k v! S& Q1 [{
C- g# c. [8 J2 m: u if( !m_lpCandList )- i& X5 a" L$ g
return FALSE;
+ i% X; d! G; v8 K6 i- h) M& W% @- A* ?. W( y
if( m_lpCandList->dwCount>0 ): |( }$ |3 G5 {; }; A* V4 f
{9 Z3 S6 m- J7 C7 P
LPDWORD lpdwOffset;/ t( `; Y6 n; h0 H8 B- t
5 {6 |+ I0 Z K8 n# s, w U* I. e: q
lpdwOffset = &m_lpCandList->dwOffset[0];
2 W, G9 @3 M, G& {6 b2 e) j/ y, t0 ]1 i0 h' t! Y D' {) c3 \
lpdwOffset += m_lpCandList->dwPageStart;
. V. C) K3 I- M( N) o& e
3 d# J, A+ i, q/ |9 [ p6 a ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );9 _9 K$ v& d" k
5 l" r# P' g4 H5 m$ d& g4 l DWORD z=1;1 y$ G4 R+ s$ A/ K$ g3 X( X1 F$ }
for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) " v' Q l4 m) P
{
, n7 U. Y5 Y: j5 [8 Z" r LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;
+ D. i, ~& K( E& o char buf[255];
3 [$ Z m2 S; o$ b6 E; R sprintf( buf,"%d.%s",z,lpstr );
. A1 V% e2 U1 F strcat( m_cCandidateList,buf );
; b2 m5 ]7 Q3 h/ G z++;9 O. `8 B/ a( P: ~1 ?4 A
}2 n- N( V5 R& U
, T3 \/ a2 F1 W
return TRUE;3 s* h- c. ?) `- ^5 F
}9 C3 }3 p! B* u8 R9 m
+ M" j0 o+ G# x return FALSE;
: y9 | j' d6 D0 v3 Z1 B}
\5 y( w% l' p+ T5 X9 ]# w8 B+ y4 b; x; A, K6 f9 B6 ^
BOOL CIM::ImeIsOpen()
+ `9 A O# x; f7 [: {5 H6 x{/ b# h/ E/ m2 g) ^3 T+ t
return ImmIsIME( GetKeyboardLayout(0) );
- O s8 F0 b4 k, _' o+ A4 b( J} |
|