|
|
//******************************************************************//
- Z6 s, q- w3 M+ C& [! v! ^$ ^//
% [# k, [' p4 f// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
$ w$ J( A* I- N$ z1 ~$ m' i0 C// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
+ \, o, f: P: O% N# v' l8 K// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
$ R" x, `, v. `4 W) y" B// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT
' P: G" R. q5 |. x4 t; R6 j// 为显示信息用,可以用其他方法替换如 TxtOut() 等3 h0 U9 Y- m; W$ U! S$ \& T/ ?
//
- }& G M" A+ J" |( V* @7 q' E//******************************************************************//
$ K9 w5 W& O0 |! }
. d. r# c+ Y0 ^) b0 _* ?//////////////////////////////////////////////////////////////////////7 t: C x( z9 D. i) L/ S! Z1 y
//! q3 J, Z6 ^! d4 }- {- T: b
// IM.h: CIM class (使用系统)输入法类# R6 p& e. h4 Q Y
// 2001/4/30 Write by Jerry Wang
1 U7 s- O! x6 O0 h6 I" ?7 D// 感谢大大鱼的帮助
( N" n" s; K# Q2 A6 d// Need Lib: imm32.lib
3 b+ |/ v, m; Y- l) |3 n. x; E r//( y6 w8 G- q) v0 ^' @/ Z* S
//////////////////////////////////////////////////////////////////////
0 v, P j$ W: v' s! I% E& G# R
. H$ {# [# o6 S/ L% n#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
5 Y7 a( c- v k. J+ K1 s! r#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_
5 l6 j2 ?' u7 T$ o* e/ z# l7 P* @ {
1 K, u9 z+ Y# q2 H#if _MSC_VER > 1000
& S. m/ d$ p& x5 ^& k#pragma once
" t- M- _9 U8 B% Z#endif // _MSC_VER > 1000' G' d: j; c( L' J* Q) X
2 b$ U6 c7 r, V: D3 T* ^$ D
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数' ^" n1 w% M" I+ e
7 v8 g* ^5 L& @8 h
#include "FindMe.h"( F5 r" ^3 q1 T9 Q7 Y$ N
- p- z5 h5 m& qclass CIM " v! Q$ u' X7 X0 n; k, P1 |" k$ t
{
6 j* m; ^5 y& G( c: z; Aprivate:
1 D6 T; s$ P- h+ z$ N- F9 C; Z0 q CTTFFont ttffont; //显示信息( \; N3 u( n3 g0 W
LPCANDIDATELIST m_lpCandList; //输入法候选文字列表$ O" W% I5 a0 U& O: W- d
LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针
4 K5 `8 S" R1 @ LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针' s/ Y% x; a% Q4 N( N2 t. E" U# b
char m_cCandidateList[255]; //候选文字列表缓冲区. n& N5 t7 s4 b: q. F, t4 l
char m_cInput[64]; //输入的字母$ L+ J/ S) }/ T
5 s8 m% I$ \) m; m b! y BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串1 y7 f/ F% R- ]" _8 m+ j( v
( H0 Y9 G& ?: L) o6 @& Q- D Jpublic:
/ V2 B7 B( Y8 }
* z4 ~% ?3 w0 B( H CIM();
- Y' j6 w8 y$ e! ^4 X3 R& }2 A virtual ~CIM();/ a2 u5 ^, T9 J( f I) E, v
0 |* Z- z1 `$ ]. ~* M( H LPSTR GetResultString( void ); //取得输入的字符串/ @! B# V4 V) L( f6 V
8 X6 N& x# A, z4 g% _* f- q% g' L void UpdateShow( ); //显示输入法信息
; o! Q4 E' ?% k8 k( Z+ p1 p' y
' _: |, c' I6 w; G4 I! s0 b LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述5 d! p% ~$ C9 E6 h3 D+ M
void ClearCandidateList( void ); //清除输入法文字候选列表
7 n8 G- O+ \6 v7 w0 X; d- I% R7 H BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表% }% t4 ~6 n5 ]: ~$ [& j
BOOL ImeIsOpen( void ); //输入法是否打开& t- m+ m9 h2 g7 E
void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
* y, w& y2 d5 g9 U8 i void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
! l$ J, ], V6 X void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
$ e1 V! @ I/ U$ U, p};
- G0 C" j% G# S9 B5 h& A
3 z0 `0 z' c' y#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)# x3 E5 g4 e' p. y7 P) K5 J7 Y, s
! G# C7 G* N. W( `& t
i1 a v2 d: a* \: C" |: m* N/ @( E$ Q& e
//*********************************************************************************************//# o0 Z; L* O0 T, h
( G8 z! K1 N2 ?9 n//////////////////////////////////////////////////////////////////////% y+ c, R& R$ L
//
5 i7 D7 V- _1 Q* X2 D4 V' p0 Q, n// IM.cpp: CIM class (使用系统)输入法类
( v0 ^9 }+ _3 y# g+ x- {// 2001/4/30 Write by Jerry Wang
& _ L" g- O/ H# R# I// 感谢大大鱼的帮助9 A9 j* h4 j; A- j
// Need Lib: imm32.lib
; }% X k# ?: y0 O4 b! z) T//
4 ~ z1 w* [- y% C- H//////////////////////////////////////////////////////////////////////
4 V7 t+ z- h" E4 m
) P: m; v" e' Q. |! Q' n#include "imm.h"/ t- A& B# {; [ I4 ]- I
. u4 b# N9 E2 y( S% A; }% F
/////////////////////////////////////////////////////////////////////// o- M2 \# {( T4 {6 \3 P. C- r+ f% p
// Construction/Destruction6 Q/ r9 G1 l, B3 O5 x* J
//////////////////////////////////////////////////////////////////////
& }) G2 X) Q. X. q& k- W1 C& }6 l) J7 b
CIM::CIM()
; }2 c; h, i) M5 E) D' z1 Q{. X$ {) `: v4 }3 r$ R
m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];2 u! d1 p5 b2 l! K4 B5 J
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
. ?+ o! U% `9 [3 b *m_lpszImeInput = '\0';
4 e# R. N1 } {" e$ S4 v" \# b' b *m_cInput = '\0';. V2 o; I# M- J5 O& x+ X
" U2 h% z* N5 x1 n: ^ ttffont.Create( "黑体",15,RGB(255,255,255) );. U/ u) y9 H6 ]" S
GetCurInputLanguageDesc();
5 x7 C- x% q: G0 g7 R}
, y$ D( a' f$ |; R) k& ~# ^" K- n" L' S4 i2 k
CIM::~CIM()
7 B+ K" ?" Y1 y9 _$ C{: w2 W7 L& K& g m, E$ b
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
" @+ P: p7 B! H5 @& f Q
) F3 t& [! {# {" o* v. H CHKB( delete m_lpszImeInput );
8 C6 t7 v. s# w' e if( m_lpszCurInputLanguageDesc != NULL )
/ z7 E3 t+ y N! r CHKB( delete m_lpszCurInputLanguageDesc );
- W0 D' n6 \4 n, B8 c6 Z+ T}
3 Y6 @5 B, d" B9 z) U9 y# ~$ P/ Q" H* D% h- G4 I+ v. u
void CIM::OnImeComposition(HWND hWnd, LPARAM lParam)4 ?; q6 H0 e# n( D5 P" Q! W X$ s% E
{, f* k5 U# u) _* N$ m
if (lParam & GCS_RESULTSTR)
) d+ @2 ^$ g E( j/ S. J! y% y1 J- B {- t3 }" p" Z/ Q0 r# q9 A
HIMC hIMC; //输入设备上下文
& x$ t; Y* f3 m- K6 `$ H# h' W( i$ v DWORD dwLen;- F4 p$ ~+ s3 k5 Y* R! |4 ~0 p, y" c: h
LPSTR lpResultStr;0 V9 w$ t7 p7 v
& a: H# e; J' M3 s hIMC = ImmGetContext(hWnd); //取得输入上下文
0 y$ L3 v9 j$ q8 T6 m3 C, C2 I6 a+ d0 U
if (!hIMC)
4 T6 ~' |+ o& Z" H return;
4 Q6 w7 ^ r0 @0 q: ?) x$ p0 w9 S! g) @& {5 b. y
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
$ R, M( Q1 ^, J: R+ Y! J dwLen+=1;
`* j" U5 k% D/ }% z7 F# Q4 U1 w
% A! l+ i6 m6 q1 n9 g if(dwLen)
, a& _! V# ~* p' z {
( Q1 g/ U3 E X3 E lpResultStr = new char[ dwLen ];
3 S1 _- W' Y7 V) |+ I" X" P% `8 L1 \! G9 K
//// 缓冲区已经满了
) Z- D" x9 M1 w' T' k if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )$ A+ u( l0 i! E2 c1 c" Z( {
{
! ^* r) V# \+ @1 ?# j0 [% m- b MessageBeep( 0 );5 c1 b! D$ C7 r' {0 v: Y4 I& G0 K
return;$ i6 r! d) B/ c1 {
}, t# C$ h! q- I0 v' F5 [
ZeroMemory( lpResultStr ,dwLen ); & j8 U/ B' K# z/ M, d- q/ \0 |
if (lpResultStr)
# W L9 x; E3 t2 j {* E `7 q; d, \7 n' M' n
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);) ^) Q. i; l) B# q
strcat( m_lpszImeInput,lpResultStr );
+ `# Z" z. [5 e! c! N7 u }
% E9 C9 Y4 O9 g delete lpResultStr;4 b/ w% l. c7 s; h
}
7 w+ N% r* @ Z/ C, b
' `1 d3 P; {4 S5 k8 H ImmReleaseContext(hWnd,hIMC); //释放输入上下文
5 }/ B4 X9 v; n( h+ f4 i1 l }1 W# x8 i z- n5 s8 g% l
" d1 M8 l7 @8 e2 M" t
}+ P* g+ I' i! o4 y2 G
( Z* V' @7 B. ~2 a; W' {1 c
void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
; M9 O5 N/ s+ M# F( x S7 o{
1 L! \( f8 R/ s7 t( f- u5 | DWORD dwCommand = (DWORD) wParam;
* W: g- k* J% [1 E$ p switch( dwCommand )
6 O j" J7 Y+ { }- r {
! ^% t; a. }# o' e* V case IMN_CHANGECANDIDATE:: t; [6 |1 R& M/ u9 l
GetCandidateList( hWnd );
& Z. C* j8 V7 [; f. r break;, q- M6 M; E- L: |$ [
& `* }# l+ ~) s: [; g$ O case IMN_CLOSECANDIDATE:
% U2 v; }9 P9 S" f% y3 r ClearCandidateList();9 ]! @ ] H. h( `
break;
+ Q* U5 H+ P4 N" U# |& p6 x8 `: Y% x5 O
case IMN_OPENCANDIDATE:' A* y, A0 I a& P
GetCandidateList( hWnd );9 u1 [ Y7 P2 H
break;5 s) \' S! B; V! d( G
}+ T1 Q* H; f' e
}
# v" W: Z" b' O0 W. Z! S* t& }7 B) q
void CIM::OnChar( TCHAR ch )5 Z/ F c' {1 E; v8 A" T1 W
{
; Q7 [: n. D4 {& ^# | int len = strlen( m_lpszImeInput );
7 w- F: y, j- T& f" M, A, e7 F. ]/ @* U$ M5 k* G" D* A0 w
if( ImeIsOpen() ) //输入法打开状态 Z2 C/ s5 i3 {
{
# _" e3 ^' g3 x
S. ?! F" [" L0 T+ H# ?% F }
& o. J, h' M( X ~7 u% u- ? else //输入法关闭状态
# I- L( {& L, A {/ \+ F. p- A7 u: d: |* v
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母
8 J& f @8 l* O' r {
C+ j5 w) i. Q: l *( m_lpszImeInput + len ) = ch; F1 @% S' ~4 k$ s/ }7 V
*( m_lpszImeInput + len + 1) = '\0';" F2 o$ N9 C: U, P
}, R1 f& O0 J/ |3 G2 U n3 q9 D
}' w6 K$ {* |2 z+ r
8 [0 u5 y+ @4 e3 z
if( ch == 8 ) //BackSpace字符3 @. P* h* z; T" T2 p
{
( a) x2 o4 ^: r" d0 r if( len == 0 ) //字符串长度为零
% h& ~: f# Z+ {2 H' C0 b return;$ Z/ n3 _. |& e' Q: g7 u$ y
3 \9 B; C* ^- V3 g if( len == 1 ) //只有一个字符' s8 W& t* c; H! ^6 u
{6 x0 o5 ^% Q1 g5 [5 p
*m_lpszImeInput = '\0';
4 p% u2 O" q5 p) ]. V# a9 Q9 Z return;
- A Y3 z$ z2 q' w" V& E# R9 r }5 |( C! i) X- H- A
5 n4 w7 g3 u, ^5 [0 q9 G
BYTE cc1,cc2;
3 J! d4 n. _2 w$ g* o cc1 = *(m_lpszImeInput + len -1); //分离字节; q$ C/ T$ w0 v+ Z
cc2 = *(m_lpszImeInput + len -2);
& A: }. R O2 i8 V' D8 j
]6 S. J5 g: L' _# B+ |" e1 G1 U if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
6 F9 f4 ?' O$ r: v! o4 G; B *( m_lpszImeInput + len -2 ) = '\0';/ R( [2 K: ~9 r; |& w* h: J- l
else //是英文字符(单字节)6 R5 F* w5 I% c$ I2 u
*( m_lpszImeInput + len -1 ) = '\0';. J$ n- e5 _6 S7 }- x5 y' q& {* y
}# ~3 h4 Z3 f f# b* _
}# `8 a- M1 J# {/ P$ J
% r% I5 }% n9 s4 ~3 o; i+ }0 |
BOOL CIM::GetCandidateList(HWND hWnd)
; A! z P. f+ B, u{
! A) I' h$ I/ b+ t. h DWORD dwSize;
) A7 w1 k4 q+ |, U& i" O% `$ |0 z- r HIMC hIMC;( @5 T0 p, g# ~0 M3 N
2 @: R ], d4 d! f e/ z( i8 v
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
3 x! b2 T& F% P2 n$ C2 J% s0 D$ L X S8 J; }( \$ B
if( m_lpCandList )
0 O& [! I! Z+ S: u3 q& C {
+ y4 n' d" Y! E' t* f) n$ d [' ^ delete m_lpCandList;- P" v) g: f4 P6 B5 C% E
m_lpCandList = NULL;. [ `* ?) h" R
}
, Q* g. n( ^( \8 l: U& B; m2 u2 T! C+ P& h
if( GetKeyboardLayout(0)==0 )
" W& Y5 |* I! _8 u7 K' B) ? {
* N2 ]3 P4 w9 x" @ return FALSE;! E% G- D# r9 h3 K
}' k9 Z! H- }5 g1 Q B" I2 B
5 D" E1 \& f! Q+ } hIMC = ImmGetContext(hWnd); //取得输入上下文
4 p- o/ O4 g2 k: R3 a, Q0 \ if(hIMC == NULL)
2 M3 n& e% X& Y1 T, c {3 p% Q ^/ t& \7 { z8 ~& ^
return FALSE;
' h4 K4 }5 ], V Y7 A( K! \ }
2 Z* _$ z& N/ i+ d, H* _$ {: Z2 Y& q U2 F
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
8 i8 @, Y) h1 | if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) " D# E8 V/ S; j! z/ n& N
{
/ Z7 |7 b$ @* }- g% Q m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
, n( ?+ M, ]1 T9 L if(m_lpCandList)
! g7 i/ }* K% A! X( ]( ?* D { Y4 n6 g, N; ^" q0 V
ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
8 t7 ~4 D. t/ F% p CandidateToString(m_lpCandList);+ A, D8 \" w1 J/ C5 ?$ R1 n+ s
}' p% l4 p% ~5 \9 ^. @
} 1 x8 X( P- r5 N0 l/ N& ^
7 j. y3 u! i0 O& a8 ]9 V4 q
ImmReleaseContext(hWnd,hIMC);8 h" c* z5 A, e! C
8 x9 R0 A* h( ?5 N) } return TRUE;/ e) K& l m% k
}9 k d/ R( d3 u) ]
) ?' D: {7 F7 e# J
void CIM::ClearCandidateList()
& r( {1 m; V5 n% ?8 Z4 f9 |4 Z- R8 O{
- [9 Z1 E# @. v6 Q) _9 N! B* n o2 R if(m_lpCandList)
- F: O( l$ ]5 q6 ?8 k {* b8 m! `1 j$ O/ y. N% Z
delete m_lpCandList;
# C4 p9 U' m! g, `" ~4 O m_lpCandList = NULL;- c* N" V8 ^3 M
}
x; J# b1 E( L6 w ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );: R) a8 t: ^4 K- ?3 V9 N" J
}2 y" ]$ J4 M! R+ E" ^4 a
# B1 L. _/ h' s8 n+ t6 ?
6 k/ k2 l: _& p# d* i CLPSTR CIM::GetCurInputLanguageDesc()' z) [3 g' w! V; v1 d# U) h4 H* }
{
! l, Z0 S, L& u6 X: c: u HKL hKL = GetKeyboardLayout(0);
6 g( B+ Q" Z% ]4 `
; ~: c% D; R( B0 A' H6 ?. @ if( m_lpszCurInputLanguageDesc != NULL )
! p% `: F/ `5 t( M8 k4 k- o CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^8 e2 j* k9 \+ s# V3 j$ R
" q3 H$ [5 I1 I6 O8 {! K int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
/ C" B$ D3 h7 o5 w) t5 d& F/ d) l; b B! U8 e) ^
CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );. U- y; x* O8 m2 B
7 A! x- k, b* S, M. d
if( lengh )8 z5 c) N2 [( ^; ], q f) N
{8 Y) b+ m, | A1 C6 p i0 n
ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);; j% e; ]3 l! [" L" e7 I$ o
}
1 y! m1 Y8 m' |8 \1 D. `6 M t; x! r else
1 ]: m5 t# d" L, z9 j! J: p4 ~3 Y { H. D: M3 o* }$ e Z& u. z% k: k
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );
& b4 c! a' R# Q9 A! p }9 ?. R0 {1 U& `* k
1 Z& z M* Q6 R0 s$ [3 l0 Q# X- i! h1 m return m_lpszCurInputLanguageDesc;) ]- c) G4 v7 r) f0 Z
}! X v" x: L) s, U. ~. ~' h) o; a
/ M. F% ^7 L! E% y+ I
void CIM::UpdateShow()8 d8 [+ C. Q' s* C* I6 s# K
{ e7 K% g( J% m+ q# S
POINT pt;
5 U9 w' M7 S; C6 V0 Z& { pt.y = 450;5 g: F+ U1 y# a% ^
pt.x = 400;
+ `- ~/ _- J9 @, f% |* T$ v4 s# s ttffont.SetSurface( DD_GetBackScreen() );6 f1 Z0 ?& C# h1 Y4 R: [5 I
ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述- q& f7 o' b7 W4 E1 m2 j
2 Y. E- B; A* K" B& F% W pt.y = 420;
7 Q* c7 S% F3 q, i( @ pt.x = 20;' @1 J* e6 I4 ]) M. E
ttffont.ShowText( m_cCandidateList,&pt );
( y/ |8 Z( @' w! B' `2 X1 [& j: q/ y5 f) T' [: C2 x
pt.y = 450;$ c! m. z8 v2 P) s! k. E S+ {
pt.x = 20;
4 Y1 S* @2 q* y! b$ ?; K6 F- E' X if( *m_lpszImeInput == '\0' )" J+ X* _* m' v6 C0 p
return;
6 Y: Y/ I' K+ `7 Y2 f5 [4 `
( j9 Q5 C5 b: j1 L. F5 S ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
5 t+ O; Q& Y8 x}
7 ~) H/ E1 Y- Q8 r/ N
3 Z8 m2 f- a1 h, NLPSTR CIM::GetResultString()
, P! N) u7 \7 ?/ J+ X{
9 ~) S* x4 h9 B1 p& K7 _# d' @$ I return m_lpszImeInput;8 z# ]* K' W" P! V
}3 N* D5 L: M1 F! t' O5 h! O, v7 a
. v2 q1 e4 V A; RBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)! o0 D4 L- T: f1 A+ ~. `& t
{
1 P8 g2 P& Y4 H3 s# S5 e% [ if( !m_lpCandList )( Y& h3 |1 G1 d t
return FALSE;
# w2 _8 x6 i4 A$ k2 q9 a2 c% Q; n5 V% p0 S0 @* r4 x6 d# r _( n
if( m_lpCandList->dwCount>0 )
2 D1 B( A) B6 n; K+ K3 K {
8 z0 E+ F! J. B' h. i. Z LPDWORD lpdwOffset;' y N" S# Q- L& `4 r
* C- H; X, n3 s p5 X5 m6 @* p lpdwOffset = &m_lpCandList->dwOffset[0];
/ T) i6 Y4 W7 q6 L1 f0 |) ^
5 J+ e- U% V2 }+ y% I! e" G lpdwOffset += m_lpCandList->dwPageStart;
5 J, m+ h8 T) H3 D
9 M# u; o1 Z( i ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );: {& @4 W9 I, M+ l# u
6 v3 X# o' ~5 F DWORD z=1;9 {$ E3 [' a- t( G, c6 Y8 z
for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) ; n" Z; W% ?6 q3 Y4 m* I
{
# y+ ^$ W2 u5 x6 H LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;8 R/ F# h8 M+ t
char buf[255];
. H3 L: i' W$ v3 y' [ sprintf( buf,"%d.%s",z,lpstr );
3 o0 p2 \& E: |( x% l strcat( m_cCandidateList,buf );
8 J/ C# T I& { z++;
- W1 s9 `9 N* {; f' g }
8 |) ]0 Z& e8 N: F
( @$ G# M: m3 _' N4 | return TRUE;" u1 m/ q" A8 [: p8 p) ^
}' l, w. Z8 O8 A! Y" J# P
7 R- u8 y# n6 y" {3 O9 \$ p
return FALSE;. Y2 r7 ] \; b7 v
}( M# \6 v8 Q* I+ I. S3 j! y f
6 o4 u" @4 l- L% c) r8 P8 MBOOL CIM::ImeIsOpen()
7 o, k( P b$ V1 O{9 Y$ j" a8 n g) ?% F
return ImmIsIME( GetKeyboardLayout(0) );
/ K! {3 [; L- ]} |
|