|
//******************************************************************//) Y* Q1 U; ]& I
//# \- D$ }9 R6 P/ o2 E" t0 B
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
6 e8 t$ V3 O( i// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
; c2 N! @) Y( o& c. v9 l// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net# V7 i! [* O, N+ u
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT+ n W& @; R; g1 J+ L
// 为显示信息用,可以用其他方法替换如 TxtOut() 等2 V: {3 Q8 v1 d
//
, ^% k0 m6 k) O; k7 @! s$ T7 ], i//******************************************************************//% F& Q: R5 Y2 j; H# S2 e# g+ S0 y
3 c- G' o' a) N. b) ?. D2 ]//////////////////////////////////////////////////////////////////////
& K" v3 R" S# b: a8 f- w//; H. P( i$ w6 Q* W# V0 t
// IM.h: CIM class (使用系统)输入法类* q7 G8 s1 O$ {. ~8 D; z
// 2001/4/30 Write by Jerry Wang
& C; b' m; Z) r// 感谢大大鱼的帮助
! v y! e$ j: K2 ]4 b5 i' e& e, S// Need Lib: imm32.lib
Y; K* |3 C5 T) I//; W( R8 b$ \0 u
//////////////////////////////////////////////////////////////////////
0 w! J8 f# e z s2 r4 a) E8 W' |4 v, m- J) }
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)1 _, X* f X1 e7 J/ t0 f5 h
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_3 k8 v& e. i3 A6 m; u0 \" M1 L
4 u2 W p1 W* W, |3 i+ B0 t#if _MSC_VER > 1000
0 K( [% Z3 e' F$ y#pragma once+ i$ x" K9 O6 }$ k' ]! a& k, b, C
#endif // _MSC_VER > 10004 A6 i3 F1 P6 m2 @4 w
5 R% Z7 [/ `6 M. N: @. ^* |2 ?3 y#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数
7 W' q- v' ^6 T9 O
7 l! ?: l: d% B# C. E#include "FindMe.h"" b. w0 h% A6 g/ @2 v
9 m0 U) S2 C! K6 L3 dclass CIM
+ r$ f! L3 P1 ^: O N. H# u! R{& ^% L% ]% q) a8 d! S/ X
private:% p8 A2 T- T: r1 k
CTTFFont ttffont; //显示信息4 N( N. n/ U$ Y4 c& A4 p" C
LPCANDIDATELIST m_lpCandList; //输入法候选文字列表3 x1 w+ g7 {: P6 n
LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针+ D0 J, ~+ V9 @- o
LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针
$ i' {! w, P' y* b char m_cCandidateList[255]; //候选文字列表缓冲区$ @" S' g# C1 V9 Y7 @, \" k1 S
char m_cInput[64]; //输入的字母
, I5 |' h* n3 U" V9 r: w7 U* d& m
( n) Y& `$ f' L0 z4 R1 E BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串5 H/ ~! Z' I6 Z" R
8 a7 ^3 w0 j2 h- D: I# gpublic:
* ^/ P8 H$ f, z" Y% Q- g e
! _* c3 _, T: z, i2 t! J CIM();
4 `1 e( t% }) i' V( K* {0 H virtual ~CIM();1 d- v* u% w" p+ T" _- K; m
. q0 l- P4 t6 U; z8 t LPSTR GetResultString( void ); //取得输入的字符串
h+ T, T. z0 _# J$ p' c/ \
& _4 h* G! S0 |* Q5 B void UpdateShow( ); //显示输入法信息
9 r/ Q1 D4 g! K' y8 i. l& D+ H& V$ Z7 k
LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述7 }4 d& O) }* n, o7 z
void ClearCandidateList( void ); //清除输入法文字候选列表2 A Q% N v3 `9 i
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表
& Z( B3 d, A& f6 B9 [5 X; z BOOL ImeIsOpen( void ); //输入法是否打开- d8 c+ p/ O" k$ v4 X9 `
void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
4 b1 ]% {; f" H0 v! [ void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
' v$ h# ?6 m1 ^5 }, S void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
: u; c; F8 q( D9 j* x T! }};, v: k( o2 n. z1 Q# Q
4 J% Y: j2 m( j& q M4 ]/ ^* e#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_): U* F: Q: c1 E( f
4 R" B' m4 H5 g9 i8 v
6 u$ B- g- l% m& Z
, s; |* m& V" `/ H. W+ p//*********************************************************************************************//
' p, |7 L) l8 O$ d& d! M; v" I, ~) [% I; e& y) s3 g; J
//////////////////////////////////////////////////////////////////////. p2 f+ w+ u" u: O
//
, k0 k0 _5 o6 Y R// IM.cpp: CIM class (使用系统)输入法类
! R7 C0 ]% ]1 K& u* ^( `8 O// 2001/4/30 Write by Jerry Wang& ^3 H# I! X' v4 G. R# q7 }+ D; V
// 感谢大大鱼的帮助- R6 I% H9 b2 X5 I/ m! K
// Need Lib: imm32.lib5 \9 M* l+ G! Y9 }4 r6 c) g" h5 d
//
. t: t# S4 ]# W1 e0 s- F v//////////////////////////////////////////////////////////////////////
; ^! ^( ?2 E+ T( ?
* J1 m8 a5 B1 b, N' ]) T5 ^#include "imm.h". v: M7 a3 z4 B
$ M* L! Z) e2 K& f# M% T3 I" ^
//////////////////////////////////////////////////////////////////////( V" Y( ~0 @, l) U* X
// Construction/Destruction; |$ i9 v/ p; D! F5 u' y# j2 J' t/ Y
//////////////////////////////////////////////////////////////////////
! N y' l' O8 O, ]3 a/ X9 \! F8 h
6 E$ E2 V B" u4 f( G" MCIM::CIM()
- k* a- R+ ?2 Q; l3 d{
5 t) g+ P# ^, F6 ^ m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
8 E5 j/ H3 b3 z3 i( G ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
4 G* e+ O. D* G$ W! D' T *m_lpszImeInput = '\0';; V* }5 Y, v8 E1 D
*m_cInput = '\0';9 C. n/ L$ X4 o: c
7 d3 j( G, i- @0 {% Y& M* r ttffont.Create( "黑体",15,RGB(255,255,255) );- t8 Y, v: ]* b+ C
GetCurInputLanguageDesc();3 Y6 @+ J* @; S8 H7 i5 v) O
}
/ G4 ]' w3 ^8 @
8 @5 a, b4 c2 y1 j& }! @/ j5 SCIM::~CIM()
7 w2 Z1 a( W- {{
5 y# l$ I/ D: W6 w! ? ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
! t6 ^7 u0 ?3 Y$ F0 S) [! l7 I' F; [! {# B' H7 h3 D9 {8 t
CHKB( delete m_lpszImeInput ); $ s& X: G) X; m" v1 T! e6 Z
if( m_lpszCurInputLanguageDesc != NULL )
5 \1 a6 z' R/ k' M% v CHKB( delete m_lpszCurInputLanguageDesc );
! m& Q ]0 B8 R, {; d5 x}7 `" F i0 v ^- f9 W3 R
# e% B/ p3 {4 Lvoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
( m, ~% _9 E9 m, B5 s; {0 u{( Q- j) }3 _1 K2 b Q# W# }: e$ c
if (lParam & GCS_RESULTSTR)) B- |0 o& C9 p; v1 e/ H0 ?4 ~7 S
{
6 t- b0 A4 G2 ~ HIMC hIMC; //输入设备上下文/ ^9 z* z) o0 {$ h; Q, B
DWORD dwLen;
v3 _! q9 @, r LPSTR lpResultStr;
. k5 b, b' s; C% `
0 w$ o0 n9 u: T( R7 n# b+ d hIMC = ImmGetContext(hWnd); //取得输入上下文
v3 P" w2 N! n0 i+ ?9 q7 R5 `; g5 P# U6 y
if (!hIMC)
8 j/ ~- r3 B e* u return;
5 ~: K( y" ?8 ] j% i; a- a: z+ f" E( N; e
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
4 L/ p1 n, g* P5 o* V2 P dwLen+=1;, S# V( G9 _$ |1 ?1 e ^3 l
2 Q o& F' j" K7 d0 g if(dwLen)* K- x! }2 j8 i& w, K
{
; g$ V0 t' b" w3 L/ U" _ lpResultStr = new char[ dwLen ];3 I2 a- f6 T2 ?( n
% c% {7 x" K" E //// 缓冲区已经满了
/ ^+ Y6 v: K i. N( B if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )% q6 f- b; H$ z7 F: q) G# O
{
/ |$ I. I/ e% n8 B: _7 J3 d# q0 n MessageBeep( 0 );+ n ^5 k, F( d3 C
return;3 \ O3 \% L7 M* t& J9 e
}7 w% d; W: M2 h/ _% i( n( N& w
ZeroMemory( lpResultStr ,dwLen ); * h/ U+ G$ Z# n& P5 f/ O6 R% e6 h
if (lpResultStr)5 @$ }5 L9 ~4 _9 V
{+ H3 U) n8 m9 n/ f; f) H4 _* ~
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
# b X1 H0 W0 L, ]! w6 {5 g strcat( m_lpszImeInput,lpResultStr );: S7 q: f% |/ j* a
}* ]- q" u' q4 \/ G3 i0 T% L
delete lpResultStr;
5 h* J2 o6 @1 D' E' O }
0 b) r# y: i; a3 T. l, E3 b
( \" B; h1 S0 C ImmReleaseContext(hWnd,hIMC); //释放输入上下文* _6 t- H; b, L' U3 e8 t
}5 Y0 s; }1 } v0 U& K1 ]/ P& z, @
1 s7 o, ?3 G" a0 K; J}
4 V G/ h$ k* ~
. H/ n3 n/ e2 p4 d. B4 k7 E8 mvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
: `2 ?4 h) Q3 i9 O+ M8 J{
1 _* X, o4 N( n6 K; q9 Y DWORD dwCommand = (DWORD) wParam;
, W! t" K3 A+ ?3 Y# L6 u' N, V/ M switch( dwCommand )
$ ^( q3 O) G* { r" U7 G/ b$ Z {
. V1 T8 K' F# L- \3 @& @1 u2 o case IMN_CHANGECANDIDATE:
* ?- S2 q/ u* z) C GetCandidateList( hWnd );+ C) E) y c/ a* Z; S
break;. C7 [# |" o( F! `# A
5 F' U3 v p. q( W
case IMN_CLOSECANDIDATE:4 L- Y$ _3 M1 g
ClearCandidateList();5 B5 t0 y2 p2 L/ x) z7 n) y
break;
* b& i1 c' q$ J n+ q$ f& @9 E( D- x9 ?
case IMN_OPENCANDIDATE:
0 E8 u1 } P t2 o* _ GetCandidateList( hWnd );
8 U }+ k c G+ R/ K break;0 [" |3 t/ H4 _( k& O; v( T
}7 }) Y/ ?$ u, [: p6 S
}
2 q4 t! M# Z: K" X
$ ?2 u D! p$ O6 ?void CIM::OnChar( TCHAR ch )1 [. W+ b9 G! Q& t* Y. ~
{
% i0 w, P) b- w8 Y8 q7 H int len = strlen( m_lpszImeInput );; I G2 F5 w( r& @6 E, V$ |
* X. |, U7 ^- I" h3 ~$ \ b
if( ImeIsOpen() ) //输入法打开状态+ h; o: U2 U9 k% T* V
{* @, Z% N' y! U! J) S
3 ]+ [# m+ N) [/ S1 U& @8 ^
}, @) x2 U; v S$ s7 x6 c8 m/ p
else //输入法关闭状态9 ]( z4 [+ w( L9 x; l
{
0 O: q. `& K! K/ ] if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母
+ a1 N+ N% I q) Q2 R" q" L7 I {3 s, K) I/ J% n2 ?8 F
*( m_lpszImeInput + len ) = ch;
. p# V0 O$ U- n" w P o% t *( m_lpszImeInput + len + 1) = '\0';9 g" L& |0 \, P2 n& s
}
F6 j% Y! o6 ~+ ~" F' {. q! M! d' \: k& l }, U O& y6 k& K. j' \/ _
- {+ m9 o _5 @0 X4 o" x; U if( ch == 8 ) //BackSpace字符5 T- Q/ \/ J* s' |; E
{& s' d& U+ P- W2 J! h
if( len == 0 ) //字符串长度为零
! ]) h1 G8 q! A! f return;$ O: L7 x% R7 n; G
6 P! C2 ]! y3 o# e& m
if( len == 1 ) //只有一个字符2 _/ M$ d9 \5 x2 N- d( X3 B8 x( s
{
- X% s, r0 _. h: V1 Q# J *m_lpszImeInput = '\0';- u2 x3 L4 W5 o0 q) l2 r; W8 R$ J- d
return;8 I7 e5 j+ m# |
}
6 [5 s3 ^& T; S7 \/ \, j/ w9 W+ t" Y6 F- v7 Z* @4 v
BYTE cc1,cc2;3 R& p$ U3 s7 r$ @, g# x7 X1 g6 t7 ~
cc1 = *(m_lpszImeInput + len -1); //分离字节0 {: P* g" j; [. }' }7 G
cc2 = *(m_lpszImeInput + len -2);( k# L( E8 t* P9 S, ^/ [9 @
" E3 {" v( {8 g# m/ d0 _2 X
if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0) \& ~ d* |7 T. v: V: h5 w0 E
*( m_lpszImeInput + len -2 ) = '\0';
) J5 U$ A( X2 y# B. U; E* ` else //是英文字符(单字节)
/ u1 E* T( A E5 P. K* ?$ K *( m_lpszImeInput + len -1 ) = '\0';
0 X3 u3 {5 O5 g% H' N, {% P0 ]- ] }' W; V7 E, o5 S( a" d$ x1 M
}
! q0 U2 }- O) `4 N
2 @/ f. P2 K1 `9 o& zBOOL CIM::GetCandidateList(HWND hWnd)' ]* k9 v# i% K& K- A
{8 q. \* C0 }+ j0 C* ^( z
DWORD dwSize; ; `7 q% d* L$ |
HIMC hIMC;
- j( b t& P- H( V- c" v3 l9 r8 ^' E: A
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
$ s; Y' H" u ?% Y- {
0 K/ _ T. Q" p2 S if( m_lpCandList )
0 H4 p# [, x* M% |4 h/ y {
& r) y8 ~/ Q m# b% r/ M( _: i delete m_lpCandList;
6 w6 f K# K6 H0 R* X7 j m_lpCandList = NULL;
# C, } v; h- B3 d- ?% T }5 V4 @. Y# w% @& h
+ e- }9 j* m6 r& p8 X/ ^0 K
if( GetKeyboardLayout(0)==0 ). { n4 k2 v, o) f& p" h. {
{1 L, r7 S8 |! O
return FALSE;- ]0 Z. I2 s/ A6 e0 h$ o
}" q' D$ I# C: |5 ]3 C
$ |# y- \- T" i; k' z. e: N* m hIMC = ImmGetContext(hWnd); //取得输入上下文9 p Y) n( f ~1 l% K
if(hIMC == NULL)
( C# |. C* O, d$ } {1 g' ]& b9 O0 K- A9 B
return FALSE;- ?- l9 A! n' a9 s: f9 m+ c$ _
}
4 b5 I' C# p3 i. K7 ]5 K: ~" j2 j0 i W6 t- s! L
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );- B1 j, }/ m& u, q5 f
if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) ' v7 g, f/ X! D0 |. Z! s
{
% O' O# Y, o' V+ r m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
, Y0 R$ d( U( Y) u. m if(m_lpCandList)& l1 s% ?1 |8 a7 S3 r5 d2 e4 d
{
- W* L1 f/ F. y: J, W ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
! @8 B. G; m7 d% q; { CandidateToString(m_lpCandList);4 @& @6 W% Z$ O t& m
}- a5 M/ T5 T# F2 r1 D+ O
} ) ~" w3 S1 }7 z' ]/ f* f
% W% X% O5 y! O) W0 a4 N
ImmReleaseContext(hWnd,hIMC);
) ]) _ t+ }9 T" r
# H8 o3 B" Z. g return TRUE;
9 P0 |! L- q! z: b}4 V8 i9 j+ ]. T
3 }8 ]& b* h4 `( U. lvoid CIM::ClearCandidateList()4 n# p8 ~1 a* l
{
9 n, s d A) f& G: D* i+ C! B if(m_lpCandList)
6 I. K+ R) @7 W {% \1 Z3 ?( S$ U& m/ ` O: T* U. {
delete m_lpCandList;
* r$ c$ `. {4 P9 o; p7 S m_lpCandList = NULL;
* X$ k x( d5 m2 v7 A8 a! ?( S }! k/ \( m# `5 A# v B
ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );2 }' {/ u! g8 p
}; M4 `3 f- u# t/ r: g- L, e1 S
, }2 Z$ {! ~) u
$ s' u6 i& G% ^
LPSTR CIM::GetCurInputLanguageDesc()
& \( n: ^% h- a{
% ]3 |; g2 B0 e6 _3 e HKL hKL = GetKeyboardLayout(0); 5 A; i4 _- i. Y: P, g; p. g
3 |3 j" F) C5 A' z/ m2 K if( m_lpszCurInputLanguageDesc != NULL )
m, P |% B! f# H8 [- T, y CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^
5 \0 M7 B m' n4 C% g$ b, H7 O4 d, N$ M0 E9 C( ~2 m
int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
0 v0 |) z; ^" m$ I6 k1 }/ B" W; f" L) l
CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
' e* P1 D" e7 R) {) T: m8 d( q" C3 ]7 g! e/ ]& h
if( lengh )6 Y. a; R( f* z5 b! e
{
0 b0 q9 V+ Q: i- B ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
8 C, I' s7 n$ t. i }
. i( `9 ?! M& \ x3 H7 Y else
& H# N) @: E% G' h9 p/ V {
$ R3 s; n; b, x5 h strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );1 U E- c+ ]& M% n2 P" }
}9 q; L; E7 F7 Z1 }% P R
2 h' S: Y+ W8 u0 { M, \: x# E
return m_lpszCurInputLanguageDesc;3 |! k; m h' r( P# [# n# n6 m. |
}
" I- ^. i0 H2 n, e: f
6 m/ E1 A: I: K/ Svoid CIM::UpdateShow()) Q% ^* C2 i, s; f+ J
{) ?$ I6 U V4 H+ v2 L! |
POINT pt;
7 @3 ^4 e, t7 [- `9 f pt.y = 450;
( F, C; c% I, f# K+ M% d pt.x = 400; 4 Z( N- T$ [' k$ ^. q9 i8 B; F
ttffont.SetSurface( DD_GetBackScreen() );
0 v3 _: U0 o& [- H/ z h2 Z9 T ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述& n: e/ j* B4 b/ c$ L/ A
8 k+ V' a/ r( j( ]0 m) Z
pt.y = 420;
/ W J7 d: Y! t5 t* y+ q- ? pt.x = 20;
8 {' \8 t( n" Y% C: ~4 c ttffont.ShowText( m_cCandidateList,&pt );
1 Q$ j7 `, q/ K- S9 o$ c" q& ^
% T4 t2 d7 E0 G, x" K4 U7 ^6 v pt.y = 450;( |7 O* } U' u9 A
pt.x = 20;
" {: I7 l( d% A5 V* O/ Y G$ Z; I if( *m_lpszImeInput == '\0' )+ M' P' V+ W' a" t
return;+ {& U; [5 G. g7 _' w
3 S. h3 z6 u4 x% z. @
ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
/ _! R9 d; k: c7 u$ v}
2 i3 f% C; T- ~
6 m* m0 t2 j! Y) s9 m5 f) W7 k0 iLPSTR CIM::GetResultString()1 W/ K; ~' [2 f, A' E
{
9 C; C! P+ t6 G2 p6 [0 g" Q! f) Q return m_lpszImeInput;. a( Z. ^- m/ a! A
}
. Z& B) i# C. e: O [. }* B* {: M3 B: }( r7 R( G
BOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)
) N: k7 |' }" X# e% Q! V; ^2 V{% P! b; m& R) d
if( !m_lpCandList )
8 M% R: d! u) F% F% T* ? return FALSE;
6 E8 c. e( E9 T+ S6 b
, N9 G" O+ Y$ u% E7 ?5 ?/ i if( m_lpCandList->dwCount>0 )! ?5 l' K$ Z- g
{4 H: E6 J% H* u5 E6 k
LPDWORD lpdwOffset;" a& n4 F3 D S! _# m
+ y( z% X6 w! R9 ?
lpdwOffset = &m_lpCandList->dwOffset[0];. D& B. d6 a! L/ U0 F
9 h' D$ {& Q" N, f, t! c lpdwOffset += m_lpCandList->dwPageStart;1 t8 f0 T8 F4 M0 [( \
& \* z, }4 J" W- C8 a ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );
6 {+ m9 ^; k1 N1 @ w2 V3 |6 r' C$ f7 d. `- }; K
DWORD z=1;
' z" v% o$ Y. i, P% \' j" t for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) 5 T9 E0 [9 g) ]$ Y, B2 O. n Q
{
4 Q0 F" e* Y7 w LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;. l* ^+ ^0 Q8 A5 p
char buf[255];
" h U% J8 h6 `5 \. O sprintf( buf,"%d.%s",z,lpstr );( _+ h/ }. c& L$ o. [
strcat( m_cCandidateList,buf );2 ?9 N$ @4 U/ Y1 e ~ J
z++;+ T5 m$ W; E6 f5 G7 y
}' I( R" U! c- R; [0 a
$ M( K5 w5 Q' R4 ]8 q
return TRUE;
8 M6 Y* d: C0 {8 h: g2 ?* } }+ X6 p p' M% y8 d- g
# t( G' j. Y# U4 h( H return FALSE;
- y0 U- Q5 ~7 F7 B2 d# x& e}7 J( f! c+ q/ V* O( W* v
7 R5 m) m' t3 P5 |! P: sBOOL CIM::ImeIsOpen()
7 l! Z* O8 H; v2 `& F, z{" {8 t/ a+ v( w% r, e c6 S
return ImmIsIME( GetKeyboardLayout(0) );# h: B. Q% |: [0 A2 u
} |
|