|
|
//******************************************************************//
2 C( l; A! Z7 X( S//
! l/ {5 \ H" m# V+ o1 j// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
( p3 D ~: ^4 m) U4 `5 k8 y+ m// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)6 }* o3 X3 @3 H5 f8 A3 a4 y7 i
// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
) q/ z9 a) ?$ m& C0 [8 H// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT- w* [+ ~7 z: B# `+ M
// 为显示信息用,可以用其他方法替换如 TxtOut() 等
* i& D; H- q0 Q# C* H1 ?//% Q- R- W/ G7 p/ _0 s' q1 w9 n9 E0 q
//******************************************************************//& h% _( D! _# w& Y. Q& ~# m
' Q' y$ p! Z+ C& o0 Z* q! ^3 R" U//////////////////////////////////////////////////////////////////////8 j5 v5 B8 h1 x9 Z
//0 Q* n) M. T0 u( @( K
// IM.h: CIM class (使用系统)输入法类7 Q6 r* f+ T1 f) @, v: C; L
// 2001/4/30 Write by Jerry Wang
8 F' x7 S) y% M! o2 K// 感谢大大鱼的帮助
; f& A4 k# w' [) l' K7 O/ k7 ` j// Need Lib: imm32.lib
( u, H5 m3 A$ _. Y/// S8 y- V+ j# t
//////////////////////////////////////////////////////////////////////
/ e3 T: ~$ X8 b% N* \
7 }$ P5 c% X. I#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)/ L+ d9 c5 Y1 _2 S
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_' J3 U+ g$ @' T( |/ f' v& ?+ |
8 x+ f" s6 R! e, O5 O Q' U% t#if _MSC_VER > 1000% P, x9 @8 I( u+ P9 S( {( y
#pragma once. ^' D L4 w. E- I% g" T
#endif // _MSC_VER > 1000
( ?$ I- a& y+ Y E3 N
. P$ C0 r; k6 C4 K#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数! s1 N& T: b9 I( r& P5 I' r
9 S/ Y( M: m1 \1 L. {- c% c#include "FindMe.h"7 u$ S" ]' ]2 u
0 k( k$ S+ f7 nclass CIM
, u c$ C' z- E. g3 |9 u{
5 Z7 C1 G3 A& s! J- T ~$ Cprivate:# _" l7 ]( F% N- h) K
CTTFFont ttffont; //显示信息
; t+ F6 q v$ c' L! Q- Z3 n LPCANDIDATELIST m_lpCandList; //输入法候选文字列表
7 R' b$ L L& E, E LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针
; q( {$ g: c$ z- `$ R2 z LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针0 e0 _; x/ d$ Y- i1 ^
char m_cCandidateList[255]; //候选文字列表缓冲区" F: {' F* k7 d, {2 R5 D% W( V/ r: Y
char m_cInput[64]; //输入的字母* }+ S8 z% F. l' e# V9 D
& V( ]4 ~3 @5 F8 C9 S5 F3 T
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串. A4 U6 A6 f; C5 ?( j2 g2 M' @
5 x+ D8 L3 q- A4 }. e3 H% w
public:
& H1 A8 Q. P0 |" i& {" P \- Y# e3 o) ]* y. o
CIM();
/ T0 }/ c% g! a7 `8 x virtual ~CIM(); f: [3 y$ i% A
[: X- b; {. O7 i) ?7 M* K. d& i7 ^
LPSTR GetResultString( void ); //取得输入的字符串 t; F- m, F1 x* v0 s
9 b( V1 i0 q4 ]8 g- ^4 V
void UpdateShow( ); //显示输入法信息
& i( C! }1 W' Z" L/ G' T' M, E& p6 T4 p- X# R4 R4 q* i! `
LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述9 c& k- X7 r; X4 [; X
void ClearCandidateList( void ); //清除输入法文字候选列表
, I' Z2 w& P5 |4 } BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表. @+ }. `( `* {$ C W+ x2 s
BOOL ImeIsOpen( void ); //输入法是否打开
3 A7 q7 W b: v) t1 i void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息/ J; k2 D4 K) i* v* n
void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
% Q( R/ A7 {+ s8 V% | void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
8 Y' {5 c/ i5 ~0 c) R- f j};
# B Q( f1 m0 H: z
; D4 u! l( e: c#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)" |7 g- X3 p( x7 \5 B" b5 v
# J) t( ~( D# h$ ?% W2 b: c$ ]7 ?
, a" R7 o4 f" Z- w) M! {: j# {
/ i. _* \9 g* R//*********************************************************************************************//
) g( `5 }$ b1 n- k( F X1 i9 S6 o! i% F: |
//////////////////////////////////////////////////////////////////////
1 w) h0 j' _2 {! t/ y//: k) K6 e! i8 k
// IM.cpp: CIM class (使用系统)输入法类
6 k% ^. T4 n5 H% o// 2001/4/30 Write by Jerry Wang- r% G/ `) u+ [" I
// 感谢大大鱼的帮助
6 X3 }: C& O* r+ g8 Y) o- ~// Need Lib: imm32.lib/ e2 L" ^2 m% g$ g% L
//
5 S( k" B. R$ k# p1 W9 W//////////////////////////////////////////////////////////////////////
/ w& x9 a0 Y2 h1 {5 S9 R! ?1 q6 k# E6 K# s$ H
#include "imm.h"3 R' Z c' q! I4 Y3 O, g8 d
( O0 S+ T& a3 |( I3 ~//////////////////////////////////////////////////////////////////////
& G7 i6 j6 w) @, g, E* R// Construction/Destruction
|0 s: ^ i! d9 B//////////////////////////////////////////////////////////////////////8 Q9 P% |3 x' [
( u9 G. g$ ]" U- j" mCIM::CIM()
5 ~7 _3 z& D Y6 z8 u% T0 A' Q{
( v2 n& @# X6 H0 y8 d m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];: ^4 z. g7 y. `+ N! L$ ?
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
' K0 r# O$ P4 F5 a *m_lpszImeInput = '\0';
/ i/ I. |) G- ^1 n, h+ X6 M" m *m_cInput = '\0';
, Q: r0 Z& t! _/ @0 S0 h v: y
/ E; g! F* v' o: ~1 [ ttffont.Create( "黑体",15,RGB(255,255,255) );" l! M; p/ o& |/ g- t/ A/ T( d
GetCurInputLanguageDesc();
( O$ W! o. s9 t0 R, g* |. C6 m$ f}
8 ^' J& a- {/ g
' A* Y! x3 w* q/ GCIM::~CIM()6 |/ L# A9 L' i3 b
{
- v2 q8 `# t( Y: n$ F. Z# H& y ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
3 y6 F; Q% _1 K* m" {/ E% ^/ d# m1 A! _
CHKB( delete m_lpszImeInput );
& a6 X) B. A9 U0 [8 I7 V2 N2 b if( m_lpszCurInputLanguageDesc != NULL )6 k4 l, B5 a1 x/ h8 ]- G: h
CHKB( delete m_lpszCurInputLanguageDesc );
& S1 ~# n. a+ O+ S7 m}
! C' e) H3 {0 A0 e' }$ P
6 @- E4 ~0 F4 O& [4 H# s( ?void CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
9 A( g% c; m8 O% y6 z# \{/ }! ^2 y$ K E
if (lParam & GCS_RESULTSTR)9 W; O( y& M2 v. l% Y3 |0 e
{1 C$ t0 {6 a, G0 d' h$ `
HIMC hIMC; //输入设备上下文# T3 i% R8 ]+ E( T) }8 P% s
DWORD dwLen;$ S& @6 A6 `5 e/ G
LPSTR lpResultStr;( f) p' o! i# j# k+ y+ o
: |+ c% p- K) {3 L
hIMC = ImmGetContext(hWnd); //取得输入上下文! {: K8 q3 x0 v
+ ^/ K/ I$ l3 D9 `' t if (!hIMC)6 M9 ?- m, Y4 S$ M+ u2 z1 F
return;
5 Y- ^0 N F4 G1 W
- |( S1 [/ J: v; H$ s; `$ s4 R$ A dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);" u4 `% W M! V6 ]% ~: Y
dwLen+=1;: F' q# y% Y1 U6 U9 C" c; z
8 t- H/ f8 J3 n* f, H
if(dwLen)
& Y$ a, y+ { {: [( o- o6 l6 q) y/ _ {1 w8 g! l: N9 O: k5 d( W
lpResultStr = new char[ dwLen ];: s" H( ^3 ]6 R, T
4 h X8 ~0 @& z: R# G //// 缓冲区已经满了
! D N: ]6 u0 p9 T) B0 z if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )# z( n m; f/ e3 E3 x- i
{
# l" f2 M6 X. n MessageBeep( 0 );/ \( Y' P% @4 n/ \8 n$ Z0 j8 F! T
return;7 N/ [1 d8 _& _9 U0 F% J" u: v8 O
}$ Y+ l5 T$ W) s$ c5 q7 L6 a
ZeroMemory( lpResultStr ,dwLen ); 0 J' y6 y" h: _0 i F$ E( A
if (lpResultStr)# ? a4 s0 o9 I) [# H1 } l) [, V
{8 m$ r: ?! P! i* F0 |9 E' ~* \( F
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);/ \5 |5 n; n/ _5 |" m. H ~
strcat( m_lpszImeInput,lpResultStr );9 v# B: o" y- h" O. M
}
; X. {% D0 K1 Y6 [9 q! Y delete lpResultStr;/ G4 a/ K( L3 \ Y6 J
}
8 f1 @0 e `, g( M& U
' j h. t# E3 S ImmReleaseContext(hWnd,hIMC); //释放输入上下文
1 u$ Y0 Y( d) [& i2 B7 X }
" W% J7 c( x% _) `# T e) o7 Q# V% k! D, }: _- H
}- T! q. \* k w( v e p7 B; ?6 u
n$ K+ }- q8 k& h! v+ uvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam)6 e! w1 {7 _. Y9 C/ _! n
{
* r1 A b; N) h0 x4 Y DWORD dwCommand = (DWORD) wParam;2 O- }: B3 I! O
switch( dwCommand )# O7 \$ A, K, N
{5 Z+ D1 U% {1 Q W
case IMN_CHANGECANDIDATE:
: e/ V$ ~& d% Q% U# D GetCandidateList( hWnd );1 `& [3 d$ `3 y* ^
break;
: W# w+ x$ Y! ~8 p5 d; I! `8 k- a$ w8 p4 c( [$ `
case IMN_CLOSECANDIDATE:8 s6 Y! g0 p' Q/ X
ClearCandidateList();
2 D6 s5 g/ x( n, ]% Q Z# b break;0 u1 D& s" g S; B6 t: l) r
4 k4 A, g5 x2 G, V; E
case IMN_OPENCANDIDATE:
" i) S$ t8 e; W) L GetCandidateList( hWnd );3 I2 z5 Y9 k+ p \# d q
break;: z: \, X6 a4 z/ d Z
}6 Q9 u+ i, `7 K+ v1 S, ^; c
}6 x* Z+ o- o! p$ a
" E9 w( d8 g9 M8 Nvoid CIM::OnChar( TCHAR ch )
/ k* N! n6 B" u; F6 L4 c, a; `{" d6 t! _+ N, H4 `6 [0 H8 u/ T, O
int len = strlen( m_lpszImeInput );
$ F2 }% _+ }& J! C. H4 H# J L+ F1 Z% A8 b* u$ A/ i4 H- q
if( ImeIsOpen() ) //输入法打开状态
* C# G2 _" u2 u! ~ {
I% H3 P5 T9 d2 K @2 F
8 A8 a1 D2 T9 N: i, ~8 _& V( X6 y- B }' ^. R/ G3 ^+ f- }) t% O
else //输入法关闭状态' x1 B' t$ S- I, w8 e' x
{. {3 B7 R6 A9 \5 s. [
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母
`7 r( ?- l- ]/ E; e8 q- w {, E0 d+ J' _( @( p9 H
*( m_lpszImeInput + len ) = ch;9 v+ h4 J: `' V6 K# B$ V1 I
*( m_lpszImeInput + len + 1) = '\0';
# B; V: A, L0 E! I. f2 e! M }
/ l+ B% F# h# b7 m3 w }
0 D, V5 c( J1 ]/ r& a+ X+ y2 ~* i2 w0 l, R6 e2 H: a& O
if( ch == 8 ) //BackSpace字符- R: S' j& B. Y5 b! h
{
3 n& t% F1 n" b4 z- X' t if( len == 0 ) //字符串长度为零1 h1 z5 p5 V8 k$ [# R. }/ e u8 j
return;
3 m( G$ ]0 r. F. I* Z/ M
! s6 }5 V0 A, N8 C% R. J, H; A if( len == 1 ) //只有一个字符
$ G% P( ~2 j0 m. p {
8 D7 C* ?5 J' y/ b. Y8 a *m_lpszImeInput = '\0';
2 Y) g( Q: |3 R. ?# I return;
. `: J P5 d$ y1 Q* {% Y8 w7 f$ S" x6 n }
! T& D4 M$ |& w$ U
O3 o: m3 G! }, v; K+ M BYTE cc1,cc2;2 ~ o' k0 J; r. B
cc1 = *(m_lpszImeInput + len -1); //分离字节: E* p4 |6 B5 V* O/ _# d' V/ B
cc2 = *(m_lpszImeInput + len -2);. N+ U9 _% K9 L$ K
# ^0 z; G. _8 ~; A1 g6 w
if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
3 H$ k' c- Y8 ^1 h *( m_lpszImeInput + len -2 ) = '\0';
4 h K' m+ ]5 D4 \ else //是英文字符(单字节)
9 {( E# g( B2 c& a) t *( m_lpszImeInput + len -1 ) = '\0';
, u+ D! \$ H* M) R5 o* F/ ~ }4 e. A5 y+ U2 g8 Z
}$ w) ^% h; L& m/ \
" O6 R* A* T2 \. bBOOL CIM::GetCandidateList(HWND hWnd)8 ]& l# Y! ]! m5 R- l
{
* S9 ] k2 `' Y1 _, _9 ` |! e5 U DWORD dwSize; ' ?2 n! ~$ ~( d- l1 P
HIMC hIMC;
% r6 ^% }/ r; L" y V! P3 J
7 u6 W" |& P* a, i( V$ h ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
5 J y; d; ?+ w! T' i$ W T9 B: [5 e7 W
if( m_lpCandList ): ~4 `4 S1 T' Q- i; c
{& _! C7 J8 U3 k: C& S7 E
delete m_lpCandList;
8 z! S. d. y ? m_lpCandList = NULL;5 F+ ]4 h, G V+ _2 L9 h
}
: D# ^+ A, _# U
" x7 O ?' r9 ` b if( GetKeyboardLayout(0)==0 )
" T' a# j& O/ ] O {
* M) @7 o" j5 Q( P+ q! p& m return FALSE;$ n/ { L/ ~! `! b: j( T3 j$ f
}
3 U6 @5 b: `; {2 k. @5 i" c* I2 L: Z s! d; N
hIMC = ImmGetContext(hWnd); //取得输入上下文* V7 \+ f/ I( B$ h- M0 F
if(hIMC == NULL)
: u3 R3 j s1 x {2 w. J `1 E$ `% J& E& ~
return FALSE;
8 ?& P% O2 g, Z' t+ |+ d9 a8 A }
$ y: h8 g6 B# `) j2 c' w5 q" `1 J! W
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
9 V- y5 z# _; U if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) Z, [# H" g) T; Q, K4 N# G
{% P4 f3 v N& O3 c* z
m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
5 D) K# J; H! T7 X8 \ if(m_lpCandList)
$ \/ H' S, G b: z' @ {
3 L* _% E4 ?8 T ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);0 q3 L8 R2 q4 C9 D
CandidateToString(m_lpCandList);% M" X T A$ R' _. q2 ^! X
}& r6 v* U0 i; ?" h( ~4 b) d3 U6 Z2 N
} : x( L) l2 Q0 P" q1 S( z
/ W) s$ Y* {2 }- M% { ImmReleaseContext(hWnd,hIMC);8 J* @5 N0 l4 K. c) N
5 J5 s/ S3 W, f" A$ A0 r9 j; |6 K: }
return TRUE;
- ^ |- j+ n! b0 s8 @}+ w; Q1 y/ n& H& |
5 |/ j8 P; l& B2 b! s. ~
void CIM::ClearCandidateList()4 _* B/ a* S3 h: T
{6 \# L* k" D5 _: H; P
if(m_lpCandList): x* W" s7 R8 }( A, f
{
& V3 @& x4 c* g delete m_lpCandList;
) |9 k$ L0 j/ ]/ ^# e! j. N9 H$ g1 p6 ~ m_lpCandList = NULL;, a {) e" k/ J) p# [# M
}
' {: O; |! l3 T6 Z ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );- _! a, O5 V# L+ {5 Z
}
- h, O6 P& w7 q c* K" @$ ]# f& m& q7 j$ K h5 e3 D
, i! q! d. Q" O FLPSTR CIM::GetCurInputLanguageDesc()" u( U; |" Q6 a$ Q
{
! M1 W1 p+ |; B6 n) y4 @7 W! t; z( T HKL hKL = GetKeyboardLayout(0);
7 l* k% Y# C: A
8 V, ]& u9 C9 R; |8 H% { if( m_lpszCurInputLanguageDesc != NULL )
. n: O- p1 x7 g. J/ ~) l0 P2 J CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^* p1 e, c2 ]" b% ]
( E Q8 \# B4 @, p3 l- D" u3 O
int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
% A0 N% d0 Q& c$ U2 r) }8 L3 ~' c, S+ a8 u& b( t8 o
CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
% B& B9 S- L1 [5 D. j& @$ l' x* H# p7 Z6 x0 C
if( lengh )8 Q1 ~ u7 g0 p
{
; `$ V8 L4 q1 U ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);+ K; z( w7 k1 x% I
}5 |! R- v) l9 R4 _6 N# `2 Y
else# U$ D/ ^5 ], R, H$ U5 m
{
# Z& |3 Q0 p$ d, M strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );0 E- Y7 H1 K2 u2 O3 ~7 q
} W7 ^) D/ c. J) ^* T9 z4 i4 M
- N3 {9 h$ S# D! g' [* u/ E" p+ p
return m_lpszCurInputLanguageDesc;
5 E% j4 m! ]0 g$ d; k1 E7 i$ X}
( j# o0 x$ k& e. t' L" Y9 q. f+ O1 h, X- x! @ y
void CIM::UpdateShow()8 A5 F' ^& @5 `' B
{
7 }' d; Z. @( @8 S2 L" M4 ^+ Q, z POINT pt;, {4 \) l M# y, l# x: x
pt.y = 450;
- X% G7 a# w; q2 m4 F9 R. R1 X" `) ` pt.x = 400; 4 l$ i+ K( P- S; N
ttffont.SetSurface( DD_GetBackScreen() );9 x5 E2 S$ y& R0 |/ U5 I1 ^
ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述2 r' J0 O; e% o* z$ s8 @+ {
3 V! W$ v. ]) [1 d
pt.y = 420;7 x1 N" `; Q6 W1 g- v8 f0 ^9 O
pt.x = 20;, z Y7 L3 \3 f9 h8 Z: r
ttffont.ShowText( m_cCandidateList,&pt );
) N) p( \$ H/ f( O3 O6 D) ^
7 l! p0 k' U& g pt.y = 450; y/ j: H& Z3 x- m5 R1 A# Y
pt.x = 20;" H: I" _8 M( R0 i
if( *m_lpszImeInput == '\0' )
* O( T- L F" |+ {# W/ v return;# E* @3 g6 m2 K/ G" r( ]3 L
* f9 U; [4 b* A2 N2 r ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字# r: h6 O! P2 S1 ]2 t
}9 A" u$ f8 R: y
$ h8 d: C- K( I! t( \LPSTR CIM::GetResultString()
% @3 R+ F2 I& C8 b3 m/ P{
6 s# E/ L# S6 F. L9 ? return m_lpszImeInput;; y4 G$ {. ^( Y: M) u" Q; J
}
7 J4 V. P/ m9 l- a7 r) s
2 M: |; Q2 T4 S& z$ O! L8 {) uBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)6 I( j+ ^. b- v# ?
{
- g8 V3 G' V: k if( !m_lpCandList )
) ~1 A- m1 e/ K5 g0 | v2 D return FALSE;
b& ~; T) L( G- Q) M# j: _4 x; J5 J$ P6 m* l
if( m_lpCandList->dwCount>0 )
2 I3 f. M$ E2 D. q3 o/ | {) L& ]% Q p4 S
LPDWORD lpdwOffset;9 R t9 Z! f) u. ^/ v% j0 d
( l$ F/ h- _- X* d9 }
lpdwOffset = &m_lpCandList->dwOffset[0];
5 X1 T4 E9 n7 n8 c: J( I
' V; G; \& H# x+ K lpdwOffset += m_lpCandList->dwPageStart;* k7 z% \% o4 {; C
+ K% E8 s" l3 [+ \9 q
ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );
6 F, ]4 q- Q, h9 |' V/ [6 h+ x3 T
3 j' Z8 Z' |$ s, H DWORD z=1;
) q$ D3 @3 T8 R o. s for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) 5 O2 C0 c; h$ l! h- S
{ ' d' a/ ^8 |8 r
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;
9 B/ I# |1 I* {0 u J1 _) ~; | char buf[255];5 L: M2 G9 a' F: F8 p3 p
sprintf( buf,"%d.%s",z,lpstr );/ H+ ^' N" m2 O- h
strcat( m_cCandidateList,buf );
0 j6 [% @0 b% t5 D9 \+ C# X z++;
# a$ T0 [! y3 P% U$ j% X; H }
3 M* B* e2 [( t+ d8 v) Z/ |& \9 f' R; O- y6 j
return TRUE;" z' ?$ S4 j8 w7 m( p5 H+ ~7 `) r
}
3 m/ C$ _" I4 X# g- u$ _5 z, {: Z' O2 ~/ \
return FALSE; c' J( q* m) a3 f! j: P5 s
}
+ L7 c. I5 p) [$ }7 ^+ _% v1 C- ]$ Z$ f; R) \* W
BOOL CIM::ImeIsOpen()' W( |8 Q. {2 o0 [! c% G5 W
{5 c# z8 g+ v+ t
return ImmIsIME( GetKeyboardLayout(0) );
2 F! m3 v2 \1 x$ L* k W} |
|