|
|
//******************************************************************//
: B' `: o. M- E& U) f) u//& i) r( `. C. M9 t0 M( u
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
9 }& q. Z- j' C0 x& i+ a// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
$ g( _% `+ m+ G9 |, f6 a8 Q: g// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net n+ T! M. x3 F# P
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT, [ V2 T" H1 J5 l* ` `( k* h
// 为显示信息用,可以用其他方法替换如 TxtOut() 等6 x3 i8 g3 |* b! K4 }; y9 s8 `. H/ s
//! H+ A/ _' z2 @+ n5 x7 l% I* N& w/ @& w
//******************************************************************//
/ B# d; v6 W. Z
7 s4 m3 ?% K2 _/ r5 r! _$ C7 v//////////////////////////////////////////////////////////////////////7 L3 K% T: J( k$ |9 R
//: |5 K q6 Q) S- M
// IM.h: CIM class (使用系统)输入法类! q& Y6 F) K/ U( G+ q _
// 2001/4/30 Write by Jerry Wang
4 c- u1 c' g+ D% `$ r( G// 感谢大大鱼的帮助0 f* g8 Q" ~8 |" h
// Need Lib: imm32.lib8 }; b- I4 R" F- ~0 Q* e0 T
//
( I6 J1 E2 R- Z$ N3 c" y# Q//////////////////////////////////////////////////////////////////////% I# Z0 t0 Y2 x- @! c
7 E& G, Q. s* R! \, M#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
9 l( q0 l ~6 ~) X0 o A#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_2 K- z# p! B6 h# p( F$ l. j, i
Q3 U! {1 M. [5 c8 I
#if _MSC_VER > 1000
+ d0 G c( _0 L; M. x2 i* k$ U! O; F#pragma once9 k Q* Y' R; |+ E) O! j0 r% v
#endif // _MSC_VER > 1000* _" n6 W; M4 p+ g; ~
, Q% D2 R: {7 ] {5 @
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数
3 u" Q7 `( K: V. M4 u% F
, u4 W8 i( t; k3 v; z1 o2 w#include "FindMe.h"! ^' M" B( ~- ]! ~" L+ ~
7 ~, D9 G1 A, L. a' \class CIM
+ V% |1 L0 e! h" B% k% S7 x{" q1 K. u6 L# W- Q: f
private:
; V. c" y; a$ D. d8 |5 E2 v' C CTTFFont ttffont; //显示信息
8 m8 o( k: C% z' X, y A LPCANDIDATELIST m_lpCandList; //输入法候选文字列表
1 y, G; _1 Y4 k; h( H7 _$ j LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针
. y# w _( D) Q+ \ LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针* M* S" u1 a1 e
char m_cCandidateList[255]; //候选文字列表缓冲区
! q& E/ }- m) \$ N4 F char m_cInput[64]; //输入的字母
7 j! c# p/ M: h3 H! b! q
1 R9 @, E2 S9 x/ r* ?: t1 c BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串
0 ~4 w* T m w8 w: J3 P) ~+ k+ h* a) Y; f/ [! e
public:
8 E7 s# S; u" w1 \8 ~2 m* G
6 L; T+ l( C9 d5 d, \+ J: ] CIM();
' M' C* h+ }7 P+ g# q. d virtual ~CIM();
0 G. x% v6 b; q4 Z6 y/ k8 C6 u
" |( \6 O, i( H0 Q# b7 `, j0 d9 x LPSTR GetResultString( void ); //取得输入的字符串" F5 M) W3 z' U8 }7 n" v. w5 z: C
2 u1 u) r! K4 e/ w: M void UpdateShow( ); //显示输入法信息
4 E R8 r3 I6 G# a! o2 `( |: ]! v1 \9 M' O) ~" V* Z
LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述
6 s( S* j* R. J, l' g% v void ClearCandidateList( void ); //清除输入法文字候选列表
6 z+ O2 J2 v- x BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表
# N; w, [6 E+ a7 N/ k& b BOOL ImeIsOpen( void ); //输入法是否打开. }( W# ]4 F% H! c4 t( l
void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
$ ~9 h' V2 s( ?4 ?1 B/ p void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
' D1 C9 C; y/ r" ]% u7 z& _, R: e void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
2 ]9 B' g0 G. _};
; u4 l2 t" U! C5 \; b1 h( w' l( I1 H9 x2 ^
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
1 Q+ J3 x+ h. x- b9 O5 i9 I
- @3 q; S5 k. {7 L% [6 Z1 p8 y, X& A: N9 H, X
' |; `1 S! u6 ^6 s//*********************************************************************************************//: D4 Q4 {1 I7 j* T4 i9 ]
6 L5 K$ X& s6 Y+ G! B; j) ]$ _5 V
//////////////////////////////////////////////////////////////////////0 D) g. P& M \, c( s) X" [: m
//5 t7 v, C+ E( R3 e/ a& r! n/ q# p, A& @- w
// IM.cpp: CIM class (使用系统)输入法类
1 ?% l0 q. T2 f7 z% p1 L$ v& H// 2001/4/30 Write by Jerry Wang" L7 `* D" v! G7 U) p
// 感谢大大鱼的帮助3 i1 k6 s% e3 i, \3 r
// Need Lib: imm32.lib
; f4 `8 ^- v5 Y1 g% Z//
# E8 [( F! g4 g( L+ N//////////////////////////////////////////////////////////////////////2 m8 i, q1 \2 r9 \( L
5 C, K# Z# l$ }0 j5 f#include "imm.h"& T3 U) `& @* d* u
+ H7 g( L5 k' k, C! s1 c& ~2 E c" z
/////////////////////////////////////////////////////////////////////// A, R2 x$ u" G0 o" s
// Construction/Destruction0 a0 d# s' H7 e4 I' X5 _
//////////////////////////////////////////////////////////////////////, s8 M1 L' B; q9 X* s7 ^
% U' g f" S( H: W9 c- t
CIM::CIM()- |* i9 P* b% r" @$ Z" e
{
4 A7 o9 Y/ |5 j* ~" d5 X ~+ O8 H# a" J m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
+ O7 ?3 e3 ]6 g/ d( ^ ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );4 \6 E+ X1 ~* I; O
*m_lpszImeInput = '\0';3 m2 B2 b. ~5 W, K, t: k+ Q
*m_cInput = '\0';/ E/ h# d9 N8 b. \# |
! H c3 L9 x, S3 u/ ]) g( w$ U3 {1 I
ttffont.Create( "黑体",15,RGB(255,255,255) );
6 x% v, B# s" M V+ B" \7 A GetCurInputLanguageDesc();, [& v, H" H5 z5 Y, W; \3 i0 d
}1 @! Q$ W7 e4 s2 Q' C5 ~
3 \. i! b" i" Q$ U- R. k4 a
CIM::~CIM()7 b; F% H1 w, Z8 I
{9 a$ h( ]9 U0 i! \8 w0 j
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
9 k" P B# \ t# S' P0 n; J
$ V; U8 Y& I! q# G* s0 s CHKB( delete m_lpszImeInput );
5 n4 T5 G4 M( O$ } if( m_lpszCurInputLanguageDesc != NULL )2 S5 a) R& _, Z! F- p' |3 x
CHKB( delete m_lpszCurInputLanguageDesc );
* E, J! Z" K, f( S2 a; Q}# [$ {& W: _6 @
2 T8 R* w, b% a& K: |6 x. _) y6 h
void CIM::OnImeComposition(HWND hWnd, LPARAM lParam)9 C' U( g5 ]. h
{
6 D0 r3 A; h; j# k: J/ o0 m if (lParam & GCS_RESULTSTR)8 P$ T) T4 ~: k8 V$ J8 A
{9 C0 |' N$ w: ?- S. b
HIMC hIMC; //输入设备上下文/ Y4 F0 n+ S- @
DWORD dwLen;- ~8 g9 q( @0 j# S3 \# d: _
LPSTR lpResultStr;
" f( `2 E, ~# A$ m8 \" m" P$ J. ^0 b% D
hIMC = ImmGetContext(hWnd); //取得输入上下文/ r, M* t N% c
3 U# W0 ]- g9 v
if (!hIMC)
' F! B4 n0 g& r& T u return;
: Y+ u9 k$ [5 ^! [% c5 N1 G Q8 H. i1 z, N, R
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
w! q: u Y8 p, Y dwLen+=1;# Z M$ i# g* u' y: Q6 K; B
! ^+ A, o3 \( @ if(dwLen): ^' x- F+ E- J* j3 q$ M
{
) d7 Q" e7 b4 I9 e6 `8 H5 l lpResultStr = new char[ dwLen ];
: W0 t- T6 }9 E4 X& K+ Y! l/ j' I# o, P* N9 {& q$ w
//// 缓冲区已经满了7 w; s. _5 p) a( K8 [$ ~
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )
3 z* C: ^" q( k' C7 L( X {/ S! Q9 c7 a( ~7 k8 V
MessageBeep( 0 );
# h7 U9 _% @% E* T* n1 @9 f return;# i$ j2 x, u& @# O0 s
}7 L# O! q+ q2 p% e
ZeroMemory( lpResultStr ,dwLen ); 0 z- k7 u6 v5 w$ D
if (lpResultStr)2 j& R0 y& {* z$ x
{5 b& J+ N1 N2 M( S* Y: J
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);5 g" h" i+ q7 x$ K
strcat( m_lpszImeInput,lpResultStr );. b# L6 q; F N4 S* s; e
}
+ y& L0 U/ o3 {0 I; l delete lpResultStr;
4 c$ s* B9 \8 Z. @& M }: k! l! b5 C4 l8 y5 A- N+ r: S6 |
* O3 U6 o! F% Z- [: }' ~; b4 l
ImmReleaseContext(hWnd,hIMC); //释放输入上下文
3 x* V- Q: ]0 v ]. } }
! ?2 Z1 l' c$ }! B0 J/ T! d6 G& C: z1 \* v, p
}0 m/ O2 C7 n) _
0 G7 l* Q5 h& V! yvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam)1 T+ N" |( r+ B( ?( G( {
{, i& @/ D1 G, f: K( F7 j: Q* e
DWORD dwCommand = (DWORD) wParam;; r% h# ^" n+ ?; L
switch( dwCommand )
- W# [: t" u ~ {
( M+ b$ t0 U8 E0 m case IMN_CHANGECANDIDATE:
' l) Y6 j( Z( E9 M% ?+ |! N' | GetCandidateList( hWnd );
# x( V" l0 t' J, ` break;7 b5 S2 e; d8 ^
% ?" P5 o8 M& L4 U: K2 J
case IMN_CLOSECANDIDATE:' p {# C% h& X8 \4 j
ClearCandidateList();
4 B% I4 s) `' L break;
, Y: q/ \8 J7 V
3 f' D+ h# b+ g' _. v' M" ^ case IMN_OPENCANDIDATE:
' h' ^2 A/ j9 l GetCandidateList( hWnd );7 P, F* S: x) S0 k
break;
% N4 J: A. K/ Q! P. z, f }6 S. [7 v: y. O0 x3 B% J- E
}$ u$ d. J, I! [& v9 F2 B M
4 `7 {! ]- ]' `; Z- G
void CIM::OnChar( TCHAR ch )
0 R3 \% x1 e' q" I, z' N{; |' S4 a2 U8 ]# N; X; r% W
int len = strlen( m_lpszImeInput );( ? p- `' C/ K B) c- X+ ` ^
) Y6 `" k) S- A2 W if( ImeIsOpen() ) //输入法打开状态
# `, h" j: d! D% B {
5 ~2 G; A/ s2 F2 ^) @& w. _) g c: Q4 y* k& o& r1 [( p( a1 |
}
8 P" O7 S5 Q; T- y, I) b: n else //输入法关闭状态2 N y1 w2 S3 q9 d+ l
{
& J0 N6 {) g7 E9 |7 X if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母5 s6 A+ |, [0 C8 N" A
{2 h, h0 a w9 n8 _5 V; e
*( m_lpszImeInput + len ) = ch;# k5 z8 s& x" I X; H- k
*( m_lpszImeInput + len + 1) = '\0';8 f, c5 b5 ?3 o( x" S$ k& ?$ K
}# Q, U5 U& D7 w6 V( }1 O+ v
}! D* K. a4 t6 A% p
+ m, R% P' k" V a. ?
if( ch == 8 ) //BackSpace字符
% f* w" X( C' [3 F* }: r+ G {
8 z$ n- o: x: D5 P# o if( len == 0 ) //字符串长度为零
& E5 G2 P: E$ l6 R. ?$ H return;% U3 }: T$ R9 ~
6 u5 V# A5 c8 N if( len == 1 ) //只有一个字符
* D) z7 f. ?, D6 @+ g {
8 o6 j, a- g4 ^4 s7 ] *m_lpszImeInput = '\0';# o; x' H/ M6 P$ b
return;2 X/ y# P! p" O- ]8 ^
} @ m5 K* O t+ z' Y, b9 J
, e0 |# ~# d! c5 v. A5 W2 |0 z BYTE cc1,cc2;
, S9 w/ e# Z, z& C& }& v; W cc1 = *(m_lpszImeInput + len -1); //分离字节/ _& L) {; N5 G/ v
cc2 = *(m_lpszImeInput + len -2);( F* ?! u: s! J2 k, W/ K6 K8 \
, k% D& k: Y/ L6 B8 g: Q
if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0! i8 U" }/ U: K, Z4 X. P; p" q4 f
*( m_lpszImeInput + len -2 ) = '\0';/ l. r9 X- u5 L8 P( |, @9 ^* @
else //是英文字符(单字节)
3 Q# E1 v' f; C *( m_lpszImeInput + len -1 ) = '\0';0 u) T7 q9 [9 y) L7 J" t2 R K* {
} _+ \1 o* o$ O7 P7 I
}; m( U, j7 u/ v7 h& w2 C; D$ _7 j
, o/ }% Z! y+ p' ], X& l9 EBOOL CIM::GetCandidateList(HWND hWnd)
' {1 J$ A- P$ E1 u, s. t{
' t, J% r$ J# Q- U# q5 A! A DWORD dwSize; : O4 S0 l. [6 x
HIMC hIMC;
) r4 M* t# T2 k& R3 W
8 K2 c; G0 A6 q# D: ~ ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
. P/ Y" _! g0 C" y" \
! s, b8 B9 x0 x, z! D if( m_lpCandList )
1 V: S0 x; J0 \; d; z m {. G$ M) Q9 i5 [) E0 g
delete m_lpCandList;
2 w" Q' f- N4 |$ G m_lpCandList = NULL;
. Z2 F, n3 V7 w" ` b7 t1 { }
) s9 K, p3 V( x% F# ?% l/ d: O( ~5 B0 H
if( GetKeyboardLayout(0)==0 )
3 V1 W! D4 a8 k' ], N& Z {
( v! M1 d. U) X6 A return FALSE;) q6 y+ r0 r; k" q5 T" M T
}
% R1 P( U* s+ h. [8 d1 M. K. d2 @( U; u" Q8 p5 O5 a9 m
hIMC = ImmGetContext(hWnd); //取得输入上下文, o9 I$ _8 Q4 b
if(hIMC == NULL)
1 \+ z) J, p7 W; Y; H7 L( h2 ^ {
_+ G, V7 Z! b; ~ Q, l' O0 | return FALSE;
! w7 B7 A* G: C- {" Y- w/ S }9 b4 a2 X0 G$ ^6 O
/ V2 D3 d: K b2 f3 A
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
- G$ k% a6 H) u9 a if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0))
3 q) a' W; m) N {' }. t% f' ?) [
m_lpCandList = (LPCANDIDATELIST)new char[dwSize]; $ Q: G7 v# m7 U" i+ K
if(m_lpCandList)
+ X: j- n+ V7 K$ q# K* \ {2 D# G6 e& }+ B: i
ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
4 i% p$ z/ |! }9 R CandidateToString(m_lpCandList);# S$ j" }& ~+ o; x% Y* {& e6 i
}
" Z2 O, V! c+ S5 \+ i+ `& [ }
, x; q7 r0 u% M3 e6 L+ y# N: r% n$ m% g$ g
ImmReleaseContext(hWnd,hIMC);
$ {0 l8 p- S% U' n6 A
; v( s9 B- f. |& @" q% N0 r! C1 k return TRUE;
. K2 C8 ~# i+ X8 f}
/ g5 t5 V9 Z7 b5 E2 g0 A( ?0 S, Y3 h
void CIM::ClearCandidateList()
* \3 p) K+ B; Z3 J4 J* I{
- t- x. }- V" A' W if(m_lpCandList)2 u& u0 i+ Y3 s# s, z6 M
{; W& F7 }/ p' Y6 ~
delete m_lpCandList;
/ E1 c; M# [ `( c; t4 [0 L* ] m_lpCandList = NULL;: K% S$ p+ v; [' B q
}4 c) z, D2 W n' |/ P N) C" ?
ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );
8 D2 r# H& w4 }& u}# i$ l5 R B# E
& Z* z3 n; x. c" n- x6 r7 h( u8 e# S8 B; u6 @) P0 y9 O( L* y, `" W
LPSTR CIM::GetCurInputLanguageDesc()# s- a) C3 A }+ q
{
# T& B" Z$ H6 R O2 e HKL hKL = GetKeyboardLayout(0);
! g% X6 \ x( A* M8 v' p+ u* M/ d5 }( \. O# T( C
if( m_lpszCurInputLanguageDesc != NULL )3 x# j% y7 c2 C1 {
CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^
1 y3 j- c" \0 ]7 @' d8 h, \. |* @1 k* x1 T6 ]
int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
' V0 a8 J$ R! s3 Q8 O
& A' `! F: h' J/ L/ K; N# o2 G CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );( y1 G! Q8 |3 `: |0 r
0 z8 R3 D, _/ E. J' [
if( lengh )
( i! E5 L- P5 r$ F+ @$ V4 ]( h: s {
3 Y8 U+ G5 x% ]' @2 {& Q6 I8 `6 Z0 S& T ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);/ ~* F1 @' G) d! R2 m8 g$ N4 C
}
5 Z+ X0 z9 m, K) v- z4 O else' W/ R. h- {8 P) A) L8 @
{2 X9 A6 q; P2 f
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );# j% ?" E S4 X/ S( f+ o9 @9 A8 D
}; I8 Z3 B1 M4 @+ G
& z3 K0 V! k ]$ W6 D
return m_lpszCurInputLanguageDesc;! W# r5 r3 Y& X: G, f+ _- ]( j
}* Z: Q1 v, J' z/ I0 |
& N+ X2 K$ \7 R. |- Yvoid CIM::UpdateShow()- W% d5 G/ v/ _. U2 d: n" J
{( L) r1 ~+ H( v& @
POINT pt;
4 x: T4 ]* H% P+ X pt.y = 450;
* v) {2 K. R" H' J% n& p! L pt.x = 400; 6 l7 b2 j! P" J/ c6 t" m
ttffont.SetSurface( DD_GetBackScreen() );
3 }4 H+ @) p7 Z1 W# q, g: q2 N( h ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述6 I7 g a1 r9 f; H! H" X- v
5 `) a" A$ o. V! w pt.y = 420;
& u0 g: _. p# r9 m pt.x = 20;% c& n+ L' D0 P! x) F" Z' X$ n
ttffont.ShowText( m_cCandidateList,&pt );
& T9 G1 Q. X( U$ U/ W
+ u) T$ e( S: @9 `: | p+ B pt.y = 450;
$ M# S- q' y9 l; _2 i' ~ {1 a% ? pt.x = 20;; _# {& X# }% n' {' I# \+ w
if( *m_lpszImeInput == '\0' )2 x- { k e& V' s% c
return;& T6 g5 I! ~. G: `' Z0 C
, D' a3 c/ v1 C. E- }3 K1 M* B" L ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字, c! m; p" [- u! Y8 j6 E0 [' c
}
2 D) J( y! I* P- J
" {1 Y1 M- C- R0 SLPSTR CIM::GetResultString()
1 C! f; T& e: H. }( X8 j{
$ E; `5 X0 i8 o# t+ X return m_lpszImeInput;
]1 |) I9 ~4 K1 s' h# b/ ]* H. W}4 r. A$ t2 k- d, H" V, Z: S, x) @ t
8 O8 F3 p" E3 v% W' kBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList); z+ t' O* ], V
{' }7 S6 o9 y' O3 F; F4 ?3 l. p. }
if( !m_lpCandList )
/ _+ N, ~; R) `8 O return FALSE;
2 v _4 o5 K5 M; |' g$ G+ @9 [( L4 @ l, a. x7 B$ A- D
if( m_lpCandList->dwCount>0 )3 t, G i( x2 }$ u7 h
{- ^' r& N7 s$ t
LPDWORD lpdwOffset;
5 c# K( E# J. g
3 c& s* U( t; g5 q lpdwOffset = &m_lpCandList->dwOffset[0];1 G- a) H2 r' G: y+ I
& v+ Z1 b; n; Q) ?+ o4 w h5 ?
lpdwOffset += m_lpCandList->dwPageStart;: o( B3 _3 \/ N5 u# \
! A' w! |' N2 E2 [" M0 A ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );* O. N3 n8 ~% m$ U" _- X2 j
" U# g/ e5 P1 \5 k DWORD z=1;
2 ^+ n4 }$ z3 a# M for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) 0 U: @! [! }2 A4 r
{ . M- D- {& h3 D8 K
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;% b7 r: `! P1 r, n# P3 J+ B/ A. E
char buf[255];
, @0 t' m* D9 m sprintf( buf,"%d.%s",z,lpstr );0 l* q+ _4 z4 n* v+ a) `2 r5 |1 G
strcat( m_cCandidateList,buf );
: {6 y: r5 ]4 w7 k z++;6 T# V5 B" K) s1 o* \- M0 k! N9 O
}6 N5 w: x* t* n7 j9 q0 R8 n. Y
9 l+ j) b* J$ \; J$ S return TRUE;
# j+ e" |$ n# A* k: s+ @5 i6 { }6 d9 r) }1 v, j9 l6 Y
$ V# s0 U" X ?6 ]' M1 b return FALSE;1 _; |# P( \0 a4 z a3 R4 e0 r5 B& m
}
% |( @& q. ~- o
# w% \3 v- `* x8 H \2 YBOOL CIM::ImeIsOpen()
2 E! W q, j& w- n1 q# S{
9 ~$ u+ N% X1 s# | return ImmIsIME( GetKeyboardLayout(0) );& F1 C# `& j8 O& t$ X q7 V
} |
|