|
|
//******************************************************************//9 p* n3 K9 l- |' M) O, S! C
//
" @6 d/ p2 P9 z( L6 f// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家: g7 H6 ]' P' {, }8 `
// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
( ]' Z7 ^: M! p0 U! ?// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
6 v, Z: z7 R8 c7 G: ~// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT
: n# J* a/ L2 K* o8 n9 o" J( d, n; s// 为显示信息用,可以用其他方法替换如 TxtOut() 等
9 ` v3 H( L) k+ F//
3 W4 |$ C9 T# ~& l//******************************************************************//! L% j% \2 W: s" z9 C
- [6 h G5 T4 x//////////////////////////////////////////////////////////////////////
. U6 d/ f4 p+ H2 x# E7 O' C7 l% G//
" v r: c: t! l5 n& `& o% n: f// IM.h: CIM class (使用系统)输入法类
) B: i* M* R* o/ D2 j( e2 m0 D4 {// 2001/4/30 Write by Jerry Wang
" t. g# U$ R6 W& F5 j// 感谢大大鱼的帮助- C0 Y1 K. `2 `. y( U# h9 \9 T$ @
// Need Lib: imm32.lib
' u) s# @/ N1 O9 Q0 T' C//
/ b. m q# R5 `! l% e( q//////////////////////////////////////////////////////////////////////4 z. L$ R; e' u
% p* T9 H h* C K( y7 W4 Z#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
# B& M2 n4 i$ [! s/ f' {8 ^#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_+ n! a+ t' H7 K4 ?' ~
$ D4 F/ d1 h' e& d* H* I#if _MSC_VER > 10004 H0 Y; t6 m/ G" l' r0 ^6 O: r: N j
#pragma once
! ?, O" t5 x: d' ?" |#endif // _MSC_VER > 1000' p) }+ ?- C: K8 ]8 J6 u
7 x8 p5 h5 N* } i7 q#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数* \% J/ ?- H5 `# X4 ~
: _) x5 w, E9 G3 ?8 D/ E, g1 L+ E
#include "FindMe.h"4 S2 d9 B: K" r) \1 A
$ C0 i3 c( U- q3 X3 }
class CIM
2 g6 e0 \0 y5 V3 {% E{
* h @2 |: H) e# K( Bprivate:5 `/ h/ H: C$ p7 Z! U+ ~( k
CTTFFont ttffont; //显示信息0 y! s: y5 p5 T: D8 N) |
LPCANDIDATELIST m_lpCandList; //输入法候选文字列表4 @1 j# z0 E0 ~' o. w X0 i, @3 d
LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针" s) x2 W8 i9 I% r
LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针3 _2 U) G+ l1 O$ K
char m_cCandidateList[255]; //候选文字列表缓冲区. X% y0 b; `* ?4 ~: L6 Y
char m_cInput[64]; //输入的字母
6 r; h8 i0 Q7 M4 I3 X# j/ c O! x- T1 ?- R1 ]
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串
& ]& f5 v# b( l6 g" _) O) @! |1 G( r
. m4 R% e2 c5 E) epublic:% I' C- d' E7 {" Z
: R6 x3 w: K9 k" m CIM();7 q* s$ T/ p: W& C; _' m
virtual ~CIM();3 e. r- H! Z5 H% I
1 @* G% Q5 ~% h4 \1 `
LPSTR GetResultString( void ); //取得输入的字符串
. W4 z& C9 {$ F- y' u
9 m0 f% M7 ^" y3 z' U2 } void UpdateShow( ); //显示输入法信息9 o/ B& i' x" w* v" m9 ?1 Q' T, Y1 W8 L
. Y, T) x- t( \) |' { LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述
) ?" S/ C! p& z. \ void ClearCandidateList( void ); //清除输入法文字候选列表: H8 }: W# I/ n4 o6 N, i
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表8 O1 N. Z: E8 G
BOOL ImeIsOpen( void ); //输入法是否打开
$ [. {! _0 p4 g void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息1 \3 k9 J, n) L! T& |
void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息* p, ]7 e1 y1 @% }; F& w, u
void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
: }. `7 _# r$ Z& M( H7 f};# w$ d6 K$ _" C
8 k- h1 p% X6 I- g; `" \0 _
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)" F6 K# I- D. B) F" g
+ `* P' y! ?4 X
6 I/ Y% J4 [2 J; C7 U& ^8 T9 B g ~9 m# y5 Z1 H/ T1 c$ s6 k
//*********************************************************************************************//9 n# T3 g: ]0 k! b
8 M3 i. Z! I; X% w0 u
//////////////////////////////////////////////////////////////////////
6 |9 {' x! \" E* `3 T" n3 S//5 p( g" _5 J& _% Y- ^" B" z
// IM.cpp: CIM class (使用系统)输入法类6 r) l9 V3 ^3 V6 k; z7 e- \) v
// 2001/4/30 Write by Jerry Wang
) w7 Y6 a( `, k* {/ V9 u$ w/ W2 @; Y// 感谢大大鱼的帮助
3 Y8 T( u! D: q0 k# d+ F; o// Need Lib: imm32.lib
8 [. |* M1 Q# V1 ]* ^3 V//
9 |; ~; `+ r9 K2 R1 E; n//////////////////////////////////////////////////////////////////////8 z; U7 z6 ~- w- P" `
/ n, P, m# S/ {1 U( D: m7 Q: ]#include "imm.h"+ q3 q! n& H. d( M" ]# E
$ p9 C) @8 \6 V. Y- Z, n% t- }
////////////////////////////////////////////////////////////////////// j$ j/ n1 f5 {1 ~
// Construction/Destruction
9 O- R2 ?6 `8 G0 e//////////////////////////////////////////////////////////////////////
! i7 c) G0 T: [( K) D5 R% \# X' s, V/ }
CIM::CIM()
9 F9 R* N, o- n9 G8 R, P0 X{; G' y$ q6 d. d/ j! ?
m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER]; n8 [2 i; v% e: u
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );0 P/ p( c2 Z4 v$ U* ?3 Z) h
*m_lpszImeInput = '\0';7 S, o' t9 R% H
*m_cInput = '\0';
( y" u0 B! u% o3 ~. J1 b: {& V6 t/ X- V. b
ttffont.Create( "黑体",15,RGB(255,255,255) );+ O2 C) k3 C6 ^! j
GetCurInputLanguageDesc();/ k: I0 e; w. |. Q4 e
}
0 B C" C. L! T! Q+ a
4 v# R* e; N. ^, q& F1 nCIM::~CIM()
9 m( e& G! A$ w* y$ l4 `# o8 x{
: f! w* X D; D% F ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );. i! x9 s* h' x
9 V/ p' r. S2 g) A! D! U
CHKB( delete m_lpszImeInput );
4 R7 ~* @) z4 c8 }' D if( m_lpszCurInputLanguageDesc != NULL )+ `/ R: D' L* O' j4 r/ q M% z
CHKB( delete m_lpszCurInputLanguageDesc );
5 |2 Z: [6 [, o+ c}
" L# b" d$ e" P: d }; s! r
- p2 Q( |9 i: rvoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
6 X6 v h# \ l+ |{, ]( z. J0 z& b5 f5 u
if (lParam & GCS_RESULTSTR)6 ?5 G; A9 S6 j6 x+ w7 r, v
{( V/ C/ K! ?! \: R0 ~7 a) t
HIMC hIMC; //输入设备上下文
7 {; @2 n4 k# N0 Y; J: o$ X( `" W DWORD dwLen;' B% e! y+ m& j& A) F" n$ i
LPSTR lpResultStr;
+ k% c2 ~$ e' {$ F, _3 t5 ?% _4 Y( L0 F! R
hIMC = ImmGetContext(hWnd); //取得输入上下文
2 [, H& }, ?9 x5 ]! T0 @! h
F( }, b+ D3 U* N6 m if (!hIMC)
% E/ ]9 p& _1 |0 u' n4 Y return;8 B7 x* E. ~" Q. C& I. Y j
* u# U t. `2 e
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);" o7 p1 O# y) o
dwLen+=1;
- _+ S0 }4 H6 v; a0 T7 j+ X$ R8 B2 H& u3 n! Y( ?$ |5 H
if(dwLen)( d6 D' k! A& o; n
{
3 O' d; I% e |; E0 }, C/ T5 O lpResultStr = new char[ dwLen ];* O2 J' b" g8 E2 N5 b
+ G7 C; U' b: E8 j2 M
//// 缓冲区已经满了
) w7 y) t; j9 D9 g+ Y6 M9 o if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )# t- K& q1 y6 t) B
{! ]5 S' P) C4 g0 h( B9 |, {
MessageBeep( 0 );* }& ~. r4 V/ Q6 t. |- j
return;, @+ K3 G9 D6 W7 D, a3 w
}
; m/ d$ }1 X) ~8 p/ @1 | ]2 N" } ZeroMemory( lpResultStr ,dwLen ); 7 u5 Y3 A$ u* V# @/ y, a: }( x' ~
if (lpResultStr)5 d9 S; J& j6 F; H5 h' x% E1 I2 B. ?
{
6 |, V7 t% e( y$ N8 B& S* z% P ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);2 B$ x0 y0 X# V1 n1 S
strcat( m_lpszImeInput,lpResultStr );) O4 @2 M8 E v+ i% q8 ~
}& N# i& V% ~1 o9 ^3 c# V
delete lpResultStr;
+ {3 K) {' h3 C( P! t! ` }
. S) B1 ^7 W5 J, j. G' U5 C7 ]" Y6 m* J
ImmReleaseContext(hWnd,hIMC); //释放输入上下文
! F/ Z+ t/ R" t+ P }4 l; t9 Z5 E& \" I5 K& J
/ T, ^4 t. q" O6 C6 N3 |5 R( J
}+ j- a3 G( I) m" {
# t# r z4 X! R C3 m9 K' cvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam); x% n% C1 f' @2 r
{3 Y! h( ^5 a, T5 V3 m: [( k7 G
DWORD dwCommand = (DWORD) wParam;
* _5 J; j# u; Z) T" C9 X, }( E switch( dwCommand )
( F7 s8 Y" g6 X |. ?6 I1 \. ` {% Y" ~$ k6 u1 S0 A& |
case IMN_CHANGECANDIDATE:. T0 |) r- {) o4 `
GetCandidateList( hWnd );
2 I$ [. }: k/ ]! w break;
- z. ?2 r) E, f5 S; J+ d& e* P) Y6 Q$ C/ P/ q7 f% W% k; x
case IMN_CLOSECANDIDATE:6 w/ ~! \- U) F+ ~+ ^8 x1 L) z
ClearCandidateList();: {" |) e# I* y, _, ~9 `# P, o3 @
break;5 H, @: T$ P+ R# T; Y) t
# B. ^1 ?5 Z$ B, ~ X) K9 O
case IMN_OPENCANDIDATE:
1 u$ @, p# @2 m+ e8 p( f GetCandidateList( hWnd );
; W, n6 [+ M$ e7 W5 f break;6 l- l" v2 B7 X5 H8 Y" g: b, O
}
8 O3 ?4 M4 b! k. F" x& n}3 \* E. x. p( _7 w( i/ C% e
" F; ]) r- X9 N$ ~/ y% x. Jvoid CIM::OnChar( TCHAR ch )" d5 k+ ^0 }) ^8 E, n
{
. m" e: V/ Y5 x+ d2 h5 j% K int len = strlen( m_lpszImeInput );
5 b K1 e3 f) n0 L9 @. F6 c1 [4 l, x! h
if( ImeIsOpen() ) //输入法打开状态
( h9 T8 y0 i( y {2 r& Y% \2 B, J; v
3 ?( d8 G, d A4 [) {
}; o$ Y+ _ J b6 x) r4 h6 @# c
else //输入法关闭状态
! W c' O: Q# U. C0 Z: _8 h {
$ v3 S; ^5 f" `$ a if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母
& W4 ^. D0 U6 m1 a% f8 G5 [ {
7 z3 F4 _/ [/ h& z *( m_lpszImeInput + len ) = ch;
5 y. y) |5 h/ D8 T *( m_lpszImeInput + len + 1) = '\0';
- M/ } l9 v( ?9 u' D }5 f' @& p9 L3 }! p7 p& J, b
}+ W9 B7 p& J) N5 i/ N
' E/ T; B3 u2 h- N5 b1 t if( ch == 8 ) //BackSpace字符
% c: H. w V7 x. s; o8 c {
6 g; E) R$ z- K if( len == 0 ) //字符串长度为零# L- _- N' P, z* G% T, k
return;
- F, c" ^# I5 X* B, A R; c+ @0 ^$ L8 B! D4 K m
if( len == 1 ) //只有一个字符* C. K$ {/ T1 y+ F
{# L9 ~% J6 s7 G3 ]0 Y- ]% a
*m_lpszImeInput = '\0';6 Y4 D+ h+ H% s, w/ r3 R3 S
return; v& i3 O" O$ B( t5 w% V# [8 ~6 f
}
7 u3 s- }+ `9 `/ m* \# H
& L$ h) \! c: E1 m. v% j% V/ } BYTE cc1,cc2;2 \0 @4 P7 J o- n3 g4 c
cc1 = *(m_lpszImeInput + len -1); //分离字节
1 }. m, H- ?0 O: @. O cc2 = *(m_lpszImeInput + len -2);
- l: h: s' E: N% i5 U% l; s7 P# R% k8 L$ R3 T' r6 g b% ?5 R
if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
$ P# P: E1 Q P' {/ W9 o *( m_lpszImeInput + len -2 ) = '\0';
, B6 N3 Q+ L! d5 H: x. O7 T else //是英文字符(单字节)
; k. ?: c8 ]* t2 x1 G0 l *( m_lpszImeInput + len -1 ) = '\0';
- W: ]# E# v% h' w! O! p7 Q# k0 S& C( F }
/ ^7 R& a9 u3 P5 H. c I+ H$ x$ M}
) ]6 ~( G. i! W
( U9 | v# e, b/ N* pBOOL CIM::GetCandidateList(HWND hWnd)5 x) ?0 a. I T% y
{
& Y' i7 Z h- d- q+ y DWORD dwSize; ! e2 G; `" Z( ^# }2 t
HIMC hIMC;3 D0 A: k% Z4 a+ [0 {" B3 c
: e; n! |* h( [ h$ X2 ^4 i
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );3 j0 \+ ^9 T: T8 p7 y
; S& |8 R: } H% R
if( m_lpCandList )& n; y; ^6 Q: c' ^) m
{
4 }2 |% N( q! m. E f' u" o( y2 g( a6 ] delete m_lpCandList;8 S% c) w; K% b6 q- F, t7 T
m_lpCandList = NULL;9 ~% b. O' f. M f: G( U+ \# R6 t
}
" m. J% p+ j8 P3 n! ^$ E9 U
+ `# @5 |& [! o) T+ J if( GetKeyboardLayout(0)==0 )
$ n, J- O1 p4 G6 u% [- R4 A {
7 x6 o; ]# w% Q# n return FALSE;! Q- _1 S8 W( v1 T
}
2 q1 r) g8 V. {5 {5 ~+ Z! V9 V
& [0 {% x3 `/ f; d, ?1 o hIMC = ImmGetContext(hWnd); //取得输入上下文$ `/ k$ y$ d0 O
if(hIMC == NULL). E3 S8 X, X ~$ V6 L3 Y- C
{
" V9 ^7 C+ w) [7 d! y2 e return FALSE;9 w. i; I' x+ W8 `$ E- F1 n$ A# s, L! |
}% m y* i) o7 a% u( B/ E& K
+ R! Q C. [' B7 e1 K k5 a) q. f, k
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );! E6 w$ F; |) a
if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0))
2 r& h3 N. y: P) _' ^7 S {9 O4 J, Y) P" Z! D. ^
m_lpCandList = (LPCANDIDATELIST)new char[dwSize]; * B7 i8 f* H9 }% N2 t! }
if(m_lpCandList)
+ W+ m, T% u3 u! X% K8 { {9 y5 d" w# A1 A: y
ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);: Y/ @7 t: o! x
CandidateToString(m_lpCandList);
2 {/ m0 Q$ {+ D& E; @# X; W6 }* K9 q }
+ j7 I, g% N/ Z8 ? } . O1 _, z7 g7 x1 g
% Q2 d" j5 b+ z# ~1 b ImmReleaseContext(hWnd,hIMC); h2 D8 e. H' I' O
3 @4 Q6 l& p# M
return TRUE;
9 \3 `! P5 j7 m6 \4 [$ P0 b}
! z5 |- r( ~8 ~/ k: Y( c; Z( M3 F4 E
void CIM::ClearCandidateList()
\0 d& F( `* r* p7 ^{
: y6 v4 @: j8 | if(m_lpCandList)
$ ?( |: Q/ f% ^1 F2 g/ R( i2 f9 b {
( m8 _" M5 B1 M delete m_lpCandList;
, C8 Z5 b; v' d7 v m_lpCandList = NULL;
H8 p: I& G0 P T v+ D: [0 Q }
' a" |, u: ]2 o8 |* q ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );
& K- ]% i% R: N! x2 N5 }, O}& J5 S3 F, J, C, l3 V6 n$ I
6 f: D0 D$ N5 u* U/ T! }6 r2 |( l# f* i# [
LPSTR CIM::GetCurInputLanguageDesc() M- L# E( J7 i' d4 @2 B
{( N& x1 B; k; g/ V% K! Q$ f! x- d
HKL hKL = GetKeyboardLayout(0); ; `3 D4 i2 g! D, }+ M2 K- y
# j& {5 z# G3 N: Q4 \1 Q) y3 u0 W
if( m_lpszCurInputLanguageDesc != NULL ), h. }6 W# h" h8 k4 B1 f9 G6 C$ U: c
CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^2 g6 r+ Y7 f# }+ [/ ^, {
4 W" I: {. t7 T6 ] int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度9 [ D" J. ]: R
0 i9 T6 T8 A' H) B+ P CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );3 Q! C5 u" X% O a9 t
1 M0 M7 f' c' M" e if( lengh )
7 D7 F* u/ V3 q {
' x: S* x6 V0 e0 V; @' W7 b ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
) O3 ?; f" B! o }
$ ] `! u1 q$ e$ W L else
" O( Q: Z' J1 j4 \" l {
5 R8 Z3 G+ m, h# s3 t& B strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );* ?4 P! f& ~; R# g
}
9 ]. j; H3 g( n; Z/ W7 {2 x
. q3 ], N' }! v% r4 y- R return m_lpszCurInputLanguageDesc;
$ T; P# }# F3 r0 D% O}
5 ]" G* u6 B5 v3 n$ Y) H7 G& O+ A: F [1 F' b- E; }4 M
void CIM::UpdateShow()* S1 c. ~# y5 j* g0 ~7 N$ `- W
{2 C1 v, l6 r2 |2 |
POINT pt;
) I$ y* k$ o8 f pt.y = 450;
. L) U2 z h! V5 H pt.x = 400; 4 B1 v0 g w9 ]9 d" O& ?4 d
ttffont.SetSurface( DD_GetBackScreen() );
4 q6 x9 K; R0 {+ ? ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述
& S: q0 {9 `& ?
+ t6 l$ z0 _) E* |- p- y pt.y = 420;
% v# V' D: T. j$ X: U pt.x = 20;
/ b/ L7 e/ { T; f( h3 {" C ttffont.ShowText( m_cCandidateList,&pt );
) C9 a7 `2 `5 v5 s' N$ X5 X( \! h5 d; U* K7 ], U
pt.y = 450;: Y; ?+ h. ^6 N1 N" U, q
pt.x = 20;3 Q- w) Y. L/ `* M2 n5 _4 Y. p- J
if( *m_lpszImeInput == '\0' )
K0 Z9 F9 S4 a" u' D# U+ u return;
. I" i/ J% A( ^; `; X. k* f
" M8 c3 n; U% |/ u+ s ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
F# ~4 _$ j! C9 x}4 K/ j2 j7 z# S
# S! U$ p" q9 V8 OLPSTR CIM::GetResultString()
6 D2 z; m% {0 h T; L! V{% ~4 o9 y$ B3 b$ p4 q! b
return m_lpszImeInput;, D# d/ t# p; O) p$ ]. f8 l
}
! C: F5 A; u/ H/ K
& B, ]) @/ Q# |* ^BOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)4 t6 }6 k t. o% f
{7 z) ]: k7 A8 k/ C1 G F) h
if( !m_lpCandList )
, ?1 x' x6 Z- }5 h return FALSE;
( L) i9 k6 T) h2 |+ H
7 E2 e6 q" K) o( m/ F2 Y7 S if( m_lpCandList->dwCount>0 )
" N. ^7 Z$ _; y1 l K, t. Z {: E; t) a% Q' W/ l8 [
LPDWORD lpdwOffset;" \9 J( U, B7 D9 X+ Q- |
* Q3 z+ _+ z8 O, d7 T2 \2 C
lpdwOffset = &m_lpCandList->dwOffset[0];
9 F8 [9 s }' b( u; T8 g1 l7 z# C6 @
lpdwOffset += m_lpCandList->dwPageStart;. b7 M) R) A0 m* ^8 J5 Z9 m6 \- |' K
9 o) a, Z5 o* V, U: z* r ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );; ?: ~2 l* ~, g" _) d
2 q: _7 a1 ~7 z* N2 G3 h" L DWORD z=1;
& c _$ X' ]5 `6 H1 \6 x for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) ) O8 ~% X5 p7 W9 D# k2 V' g
{
% K$ H9 P+ R1 }* l LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;* V) t' r* Z" b6 f
char buf[255];$ Y7 ]. o' a/ ]& f
sprintf( buf,"%d.%s",z,lpstr );
' T( p @% F9 D- {* C strcat( m_cCandidateList,buf );
2 S# g( V7 V4 P) h% u1 P8 g z++;
0 f2 G- K7 @+ b& @0 W }
! o: i: s' d. \
Z+ }" g* l1 n" c* p4 I$ [ return TRUE;
7 V$ e0 J" T0 Y- ~ }5 N/ h8 R) I4 Y
& F' Y* j7 F- H. c6 F4 L% G7 K( o, \
return FALSE;2 q0 I$ P4 [4 M6 e/ n
}7 A" C+ t/ [ g; x+ }: m+ f
3 [4 y! G; P: P# |/ u$ e
BOOL CIM::ImeIsOpen()
8 Q4 ]# K0 L U" }- ^{+ F) D4 r8 E% d
return ImmIsIME( GetKeyboardLayout(0) );
1 L! ?6 Z: j5 T} |
|