|
//******************************************************************//4 H$ H6 k1 Q7 i; e% r4 e: @ |
//
/ K" a/ z2 L, ~- G// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家/ R6 s1 y# ^2 T/ o! s* t2 c
// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)3 d! C5 N3 r" G" v
// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net4 W4 k* w" A% |, ]8 l/ a
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT; l+ a% ?. r$ ]
// 为显示信息用,可以用其他方法替换如 TxtOut() 等7 M* D& M$ y, E. F
//* P, c9 |2 E( i/ U% K0 g, m6 t
//******************************************************************//0 P5 @' P7 Y8 O
2 d$ y& a# Y2 a9 d8 x% q
//////////////////////////////////////////////////////////////////////: ]9 x: {$ A) [" I0 i* ]+ j0 Z
//
, h, A X+ ?$ k: [! W// IM.h: CIM class (使用系统)输入法类
9 J: ?( k, h/ E- `// 2001/4/30 Write by Jerry Wang
3 M6 g+ q3 b3 d& b3 K2 Y6 @1 g- B" W, P// 感谢大大鱼的帮助% {' m. f. o, ?$ j! g, B1 ~& l
// Need Lib: imm32.lib
: Y! k2 U/ ?4 I' I& g// G- V+ v; q& m: G0 K( k% ~3 D
//////////////////////////////////////////////////////////////////////3 X5 b, v3 z; c0 f) B
8 @: i" o) g3 H! y* q& E
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)# H! w$ g q0 l7 g
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_; F0 G5 `0 `' N+ x
4 @* R2 v# c; B& |#if _MSC_VER > 1000" w; X4 s/ N0 a
#pragma once
- G1 \ U/ i2 x6 f# C2 W8 K#endif // _MSC_VER > 10001 o1 k0 C' x" q3 K
) X& q! r" y+ F0 _ G- w( o#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数+ d3 G: V G% {$ Y, L p
' m) b+ x6 Z, {1 n T7 k4 G#include "FindMe.h"+ k) [: Z3 L, C8 @/ F
" R/ @/ B7 t6 _) q# h( Q0 }class CIM
6 q8 o5 c: k3 }6 v2 n; y- _$ P{' `! e7 }9 ^6 w
private:$ ]3 O' r; M5 ^& h/ I, D- e4 I3 p& e
CTTFFont ttffont; //显示信息 J r8 V B8 E/ e0 n
LPCANDIDATELIST m_lpCandList; //输入法候选文字列表% e% `. k" g+ ]
LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针% P! L: i$ Q# O8 R1 m: a6 [
LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针
3 [2 J7 @( \# w/ \' P# ^ char m_cCandidateList[255]; //候选文字列表缓冲区
$ f; N9 t8 G+ y* [ char m_cInput[64]; //输入的字母, G% ?+ D/ L+ {4 N
5 i* u% w: }0 M" r3 n
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串
% [7 L$ c, F" W, }5 {( A( c2 H# r# R
public:9 i5 a0 B; k' d
% w% b, q5 F4 e( r* O
CIM();
+ y6 t% b; ^ C: G virtual ~CIM();% j8 V) K- Z) {1 m# z) J# ?/ M) L
: P% m3 e5 }3 h) N/ J: k: E/ d LPSTR GetResultString( void ); //取得输入的字符串
, ]/ V0 x6 U% C8 D% a$ ^# P# S8 R. M$ N2 M
void UpdateShow( ); //显示输入法信息
0 r" ^& u8 |% s4 M% l( s2 y
f2 H& l9 y6 t5 o LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述7 W I0 w8 Y5 D+ R0 @$ @
void ClearCandidateList( void ); //清除输入法文字候选列表, l9 c/ P+ g, `7 m* L
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表
) g: ?/ V* G; `2 y6 V( S" M% w BOOL ImeIsOpen( void ); //输入法是否打开
& `" X% g% [/ h" ]7 ~. k0 @3 R void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
: N" H+ B7 v" [8 ]+ b! V void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
. c5 a) D! b# d" `- |, x6 u void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
. \$ a$ x+ E3 j9 w+ O};. u J1 `; w& K; g' _7 y6 `
+ z& Z& d1 ^6 y+ q! A
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
4 Y8 Z3 b) q t+ z ~' S8 x
% B' o/ z" @/ [7 t
) ^: d- a9 I Y! m7 n ^/ i4 G3 i7 p
' |" ^) o" E) @5 M//*********************************************************************************************//4 S7 m+ I1 P; r* M% j
! t. V' w& R! t/ p. G) R
//////////////////////////////////////////////////////////////////////
; J8 N. C' s4 J! C/ v6 X5 H* V1 w//
9 F2 }' ~8 f# r// IM.cpp: CIM class (使用系统)输入法类0 s' G- n! u; }$ M3 _' Z: Z
// 2001/4/30 Write by Jerry Wang
( B* l* v( f& o1 }/ q// 感谢大大鱼的帮助
) ? ^; |) |/ B1 S- F// Need Lib: imm32.lib
- G0 m$ z# Z! W: Q% ^//, k# P/ R% U, U- _' v
//////////////////////////////////////////////////////////////////////( u7 h8 A+ q; F4 ^8 n/ Z
( `3 c' s0 P0 z9 M
#include "imm.h"
3 O {- |7 @0 T5 m3 q# m) b% r/ o! U2 S) r) X4 j- Q# Y7 J9 u
//////////////////////////////////////////////////////////////////////" ^- ~4 t. Y2 Q
// Construction/Destruction
; m$ u- D) B) z/ k# B. S//////////////////////////////////////////////////////////////////////% o! q! ^. v/ R% J/ [, j
" e" ]3 E" S' {8 FCIM::CIM()
9 }4 l2 s; C" S* v1 X7 g{
3 A B5 I6 R: v D d m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
% `9 l; |4 w U" Y; } ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
& C7 h- O2 i. A0 g7 @ *m_lpszImeInput = '\0';
( L% o. g+ d8 N9 N *m_cInput = '\0';. i" Z5 f1 q! t
6 C ^6 H, r1 w! O ttffont.Create( "黑体",15,RGB(255,255,255) );
7 C) ?" u, a4 F/ m GetCurInputLanguageDesc();. g7 |, D& C/ D0 ]
}
+ h! ~8 Y- z. ~! K9 D7 V$ T0 h$ D: k* C2 j3 A$ H% p
CIM::~CIM()
, C5 G( W# q# ~# w o; C{
l9 x1 ^3 J3 F J& R/ c% V ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );0 \' Y# i6 z; b5 Z% [. p) T
# m R$ Q/ a/ t4 h7 {( A0 L9 |2 y
CHKB( delete m_lpszImeInput );
- s% a! L% r5 E. W( D' b3 X if( m_lpszCurInputLanguageDesc != NULL )7 V f" _# ~6 f9 h& B
CHKB( delete m_lpszCurInputLanguageDesc ); 8 T# }8 U: Z) F2 S |/ P
}
$ [4 {# w% k B. _+ ^0 S' Z3 w8 {( {9 i* w- m) L8 |& S
void CIM::OnImeComposition(HWND hWnd, LPARAM lParam): P2 V, q' K, H& L, i
{/ g) L3 T3 r: J Y+ L o2 c
if (lParam & GCS_RESULTSTR)
* }# F; v0 t- x' I6 i4 Y {
. F" G* [& [# r | HIMC hIMC; //输入设备上下文 t: U- h9 |- q+ K
DWORD dwLen;
( }3 D" I. D* o* k+ d; k- Q! o LPSTR lpResultStr;8 D) _0 t1 w' P0 N* u& m
; E" v" O" y$ U- S hIMC = ImmGetContext(hWnd); //取得输入上下文
. m6 w# j3 c$ v5 t2 l F1 c2 b' g4 E; y# z# D. x& P, }+ l; J
if (!hIMC)
. D6 K+ ^7 Y/ S# A9 h1 P$ i return;
2 T: i8 l6 Z! L
. F+ Q9 Y* q" [' } dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
6 \& B- v6 Z, ]' ? dwLen+=1;
6 F2 [/ C. d# p2 H1 d4 @% l
- [0 }5 ]2 z8 l0 X4 w& g if(dwLen): }8 D8 m9 R& W' G# B) L/ M5 I [; I
{
; X# h' q8 S5 I; o* D: k N lpResultStr = new char[ dwLen ];
5 b& u8 E5 T# s/ s+ d
8 D, T: z3 ?. z6 v, b# s8 y5 g //// 缓冲区已经满了% f$ o$ c9 ~, S
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )4 |+ x6 r8 Y( j# z! t2 W8 f
{
& d+ h& R; g9 V5 `; G MessageBeep( 0 );+ u& ]: g& S4 k0 m# o1 c
return;: [: `7 F* }6 c
}' G; ^0 V/ g5 ]' ?
ZeroMemory( lpResultStr ,dwLen );
9 S/ f" u$ \+ a! m if (lpResultStr): O0 A2 ?! m/ z$ |2 k' R! W
{
5 w9 F% `- q J" _8 t* E8 i9 r ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
) M$ \5 @7 P; ^/ O2 g4 \, `' ? strcat( m_lpszImeInput,lpResultStr );
1 Q$ y# U4 s9 P& Y/ i }
4 P' u' J. \* D5 v z delete lpResultStr;
2 C) G# ]2 ?* c9 G/ ?, t }
5 a" q5 W6 m% a; D" n
4 S0 z n; S1 ?( U ImmReleaseContext(hWnd,hIMC); //释放输入上下文
. C3 X9 d& z, x% M3 L% z) T) f2 N }2 F( N: t9 a$ b; q+ l1 R
1 Y0 L: J* O5 u4 C
}) O# y" E) ?6 c5 {" T H, k
5 ^, E, X' m, K% j4 w8 Qvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
6 D& b$ h: |/ N4 O g* F i; z( W{
6 `) H; q( h; U+ K* { DWORD dwCommand = (DWORD) wParam;* P: ?8 A5 V$ T4 i6 p$ c
switch( dwCommand )
' S" w& D1 ]$ ~5 q9 g# o4 _4 t; Q {
0 u$ \$ l9 ?& Z0 c1 M% e& M case IMN_CHANGECANDIDATE:9 Q7 h8 f7 _0 [8 d" v) ?
GetCandidateList( hWnd );9 }# F$ d5 |& B7 F' H+ V
break;
0 \! W8 Y# S& M8 ?+ X/ l+ u6 C$ M1 C+ l; M- j3 H
case IMN_CLOSECANDIDATE:. @& R* L' X& b2 x3 H4 v. A
ClearCandidateList();
2 P- {0 |5 g/ `$ B, j& L break;7 n( B: Z e9 x8 T: a: Z
/ z2 k! ?" l6 z6 T case IMN_OPENCANDIDATE:
" q# f- a; |; V, _- d/ c, Q/ ]0 o GetCandidateList( hWnd );# F0 L9 S9 j; W$ f- m' b
break;
$ T9 Z& R- X" c }
* b- w2 X6 O/ l e3 Q3 _: b4 F}
$ S3 ^1 \; s& w2 |8 N( V3 @. l& K
void CIM::OnChar( TCHAR ch )
- e) U9 ?" i% n ~* M{: g7 |2 \5 w! j! ]2 n" b! h
int len = strlen( m_lpszImeInput );2 p2 E% y' g$ M9 o# k
. a3 f* L' b/ `, q! _( |, U# Y
if( ImeIsOpen() ) //输入法打开状态
, ~% ^& [0 X; X N z' C, y {
3 b3 r8 N7 _% R% n
$ F, f& n0 r, V( ^ }) _( ]' W2 \% a2 I
else //输入法关闭状态0 p: }: b( v% F" i
{
3 X! y) t5 B, R' Q if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母, p9 D, u$ B" g( } Z
{
8 z. p2 G& a/ ]# g; |" d *( m_lpszImeInput + len ) = ch;4 y' `' x7 P6 w, |" N8 l s5 E" R
*( m_lpszImeInput + len + 1) = '\0';
9 [1 D6 {- Z. K6 _( h# Q5 M( ?) { }
; [5 P. c" G% Q/ i& R H" o }, }1 H# M# t% ?/ u
3 w. @( H6 K/ X- q" v( q8 a( N- u, { if( ch == 8 ) //BackSpace字符( G) s" P: t0 g8 j( i
{
# b- N [6 m* K( G) h if( len == 0 ) //字符串长度为零7 @) ?! P$ T/ i
return;
6 u+ e+ G4 P( _1 `2 c6 }# o3 j9 z" v" V, D3 f0 D! v5 [4 }8 h
if( len == 1 ) //只有一个字符2 \. I0 H: m: \' l$ J+ t+ l! `
{
% T* \+ z' t2 N1 V, E& i& p) L- q *m_lpszImeInput = '\0';
) ]+ L. n, @: E# ]7 l return;0 [9 I4 g N7 V3 k
}) A2 M+ W F1 K6 l
% V% E. N! ?: H
BYTE cc1,cc2;& E" `9 h" Q+ Z
cc1 = *(m_lpszImeInput + len -1); //分离字节5 @( `9 h3 _; f3 ^
cc2 = *(m_lpszImeInput + len -2);8 \% a# A8 {* g* `; S7 D
( h( B- M! W- O/ N
if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
$ J& }( y0 T: I* m3 Y *( m_lpszImeInput + len -2 ) = '\0';
9 s. H- O1 F+ F. F9 e else //是英文字符(单字节)
: ^2 O* B, F$ C+ @& z *( m_lpszImeInput + len -1 ) = '\0';
2 l3 ?( y) K! g7 v0 O }
4 c4 f3 L. t. K, { W' ]7 y}& K' k `9 q/ r
! ?* F, e2 o4 M/ B9 F9 [BOOL CIM::GetCandidateList(HWND hWnd)
: ]% {6 q( S- p+ s' b{8 F( j; M3 }& A; M& I
DWORD dwSize;
' l% M* ?' a. P" [ HIMC hIMC;
0 m2 x% j o9 ~* q. _
5 ^5 N, i8 }9 G }, S9 @9 h; M, _ Z ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
" m6 B! O# p4 }4 L' {: |6 q6 r0 R( z. ?1 w& F
if( m_lpCandList )
: N4 Z0 k9 N; f {6 ~3 H8 Z; t, z c6 s# k2 E& ^7 \
delete m_lpCandList;
9 _3 T; ]# H" z* A. A m_lpCandList = NULL;) D; R/ E# X) l" e. }
}0 X4 C( [! K6 J- b
+ B$ X7 g X; l. M! T& F8 f
if( GetKeyboardLayout(0)==0 )* @9 |' B u5 s6 e" m: o
{1 g& n. t) X' H" v8 X9 h
return FALSE;$ r. d# \/ B1 N$ ]! ^. Q
}
5 t: x2 z% ~+ f3 Y: p& ~0 D( i T, o) [) y- L: M! N" Q; ?
hIMC = ImmGetContext(hWnd); //取得输入上下文8 }' c8 m: K, E, M
if(hIMC == NULL) H7 d% Q. g/ @8 D( K
{4 x+ f8 J% K& Y* g% _5 X& J: L
return FALSE;% ^3 b" \; o2 E1 t
}0 w0 f) j. H% |) C+ u% e
0 d" P, Y' H* q4 _/ O/ m$ y ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );% e3 [8 C/ n6 q0 Y+ q
if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) " L% `/ P$ d `) Z; S) B; V
{1 T. {% |3 w3 A! L8 B; z
m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
# D9 r. W/ k5 I0 _- n* y8 e if(m_lpCandList)
% y h* K+ t. I7 f8 i# j$ D {
: d7 P/ O; {8 D* W+ o1 Z* _ ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);3 C5 z/ |* ~! A, K+ m
CandidateToString(m_lpCandList);
* ~: _; u6 W6 X" { }
; Z; I" A, n3 H$ T } 7 Z9 L; A Z# N% z! b& N3 u2 ~
8 w; y; [( p. z3 C& ~0 G p" k- v! E ImmReleaseContext(hWnd,hIMC);
. C) G+ Z+ g3 H( d5 m) Q
# H. A4 I- r. ? return TRUE;: E ^ x. Q" v! v2 P' ~" w4 v
}$ f+ x$ g) {( m5 M
' O- s9 P: R: W6 Z' o7 _void CIM::ClearCandidateList()
6 ]; O! L7 w; `{
! ?7 G3 d3 b) h if(m_lpCandList)
8 i, R% H% E! ]% Q {. z9 c6 D" \ P2 @# v/ q0 R: {
delete m_lpCandList;
$ H' l# O T1 J6 W; X: m1 P m_lpCandList = NULL;* f2 A O+ A: n; {$ ^
}) q0 r* \, V0 ^1 l6 E4 J( ?
ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );
1 B- H! c6 l" M. k: {}! o( _% m8 N1 f! o& r
* q5 ~7 j* B6 p/ o
3 e. t2 f" \' C- pLPSTR CIM::GetCurInputLanguageDesc()- U/ F7 Z8 f% ~/ c0 X Q# N4 x0 Y
{
0 e3 k9 n5 @2 }! j1 R) R% z HKL hKL = GetKeyboardLayout(0);
) q; B( |* @2 Z+ ^% D# q# Q3 k+ ?6 R
$ B6 g. R! Q: } if( m_lpszCurInputLanguageDesc != NULL )) H- p- s2 f" H. w6 B
CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^1 k, x( Q5 ]: j0 c- w# t; V; ]
- g9 u& r' x$ O* h2 {9 {7 d
int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
8 R0 K0 M& o* J5 x Z4 t
, N H( z6 n3 x$ b1 c CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
5 w. Z- u; X M* p b4 J8 J' a# N" j [5 U" D$ R S' v
if( lengh )$ {1 d1 x0 i+ }" Z5 k
{
( r, B: i A8 f ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);
& J& e6 R; A1 T4 D* G" G }
7 F% U$ t# S% a+ S7 _ else
! H h: b3 `; J. n6 R2 c z% W {
' V) r/ L6 y0 | strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );: J% n4 I9 O. ^5 r/ h2 b; z
}! j: Q |* @2 a0 e& v: B
+ d# Z, w8 W7 C5 B2 S
return m_lpszCurInputLanguageDesc;5 V( I L4 ^% N9 L% b; |
}4 ?/ Y# t8 U" D; ?
% `5 X6 C3 ^! I+ x% |; E3 k6 a
void CIM::UpdateShow()& ~! {! b+ h7 H9 S. n/ d
{/ v* _" a$ _0 ~5 n5 Q
POINT pt;
! d7 B% S4 O/ s$ }) @/ C pt.y = 450;8 t- Y" R( D! a3 e
pt.x = 400; 8 n. F4 B% @/ K, }
ttffont.SetSurface( DD_GetBackScreen() );; Y4 ^: g; H2 w- ~0 D, Q. M
ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述
$ i9 z% ]' p! F0 ~( U( T, I* R! _
" x! t2 ]; y4 m" h pt.y = 420;
9 U9 s* ^' ]4 @# y1 F pt.x = 20;5 P% g' w: |2 X- e/ W( C
ttffont.ShowText( m_cCandidateList,&pt );* K+ E. B) g m3 r5 [; d9 B" V" K
. F- h$ v+ _9 n. }+ K, L, w
pt.y = 450;
+ t4 T3 j" q& ~ pt.x = 20;
5 k# r3 d" W" h& Y- | if( *m_lpszImeInput == '\0' )
3 m# C7 K) U( j) ^ return;! K' t' Q* k9 c; V! f
2 S' N: G7 Q: ]
ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
, V6 q, ]5 Z& @% v6 M/ e}
8 D0 l3 \1 \+ J! e. }$ J
+ ]3 R- g6 l; m! ^/ p5 A' ~LPSTR CIM::GetResultString()
( Y0 S1 r4 Y* r{% \; ~2 ~/ N' x% E) v6 Q
return m_lpszImeInput;4 v; m# B' k0 I. O
}7 X. E. R$ [/ W7 T. B. k8 ?0 ]
" _1 N5 Y6 f3 j' ]* ]; yBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)7 `/ O2 b6 @3 U6 p% m
{
i3 p. `$ v# E9 k. J7 q if( !m_lpCandList )
4 k5 \. r% t/ `% m7 j. V6 _ return FALSE;
3 s* Z2 V' G( R5 B6 _$ @( b
}( F+ m, {% p, r& q if( m_lpCandList->dwCount>0 )" c) M. A" }! w1 P% p1 H
{3 ?' z2 ?# f/ s/ W3 V) r
LPDWORD lpdwOffset;
7 j2 @" H1 H$ K) U
% b+ l: r5 ~6 s1 K1 M lpdwOffset = &m_lpCandList->dwOffset[0];% ^0 G0 P& a! E2 L5 X6 X# }
( K4 n2 |+ G, Q2 v7 Z( R
lpdwOffset += m_lpCandList->dwPageStart;
: U4 [6 a e/ v1 R1 B$ ~
6 {) _5 [* e) u1 A ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );
$ M" t; f0 Q# B, @% ]5 N, L# {& Q5 C9 B }( A8 X7 n
DWORD z=1;
5 d( c* X4 _/ l% \ for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++)
5 A! ~" T# T4 |. M: E4 ~# I9 l6 [7 B0 Y { % A; N+ C' ]; q9 C+ ~0 C! [5 B0 M
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;
2 G' x9 m" s& V! k# n char buf[255];4 N0 V/ K9 e5 O
sprintf( buf,"%d.%s",z,lpstr );
+ \+ P* [6 ? W3 Z/ L strcat( m_cCandidateList,buf );2 X1 G1 F8 c0 q+ R# c o1 f
z++;$ \0 B" y& P8 Y* @' Y
}
3 Q. E+ v$ g2 O- o7 ?& D
6 ^# @" J. C$ E! Y) T return TRUE;
. X( n/ F9 v- G& H$ ~6 o( ] }- m& w) E! k# y- P" n0 R9 c* F
' h) j& t4 I3 g; h: L a return FALSE;2 ?& ?$ h! i" \
}* m/ C$ R' ]2 Y1 U* f
U M' X0 d$ r/ N
BOOL CIM::ImeIsOpen()
1 d1 C: i7 [3 S{
6 \3 R: _+ w H' i! I return ImmIsIME( GetKeyboardLayout(0) );( m( v ?% C. }& O& |
} |
|