|
//******************************************************************//1 T) b( b' u' n- P' l6 q
/// l* N8 V: V/ v2 U$ Q+ p2 m. V. p2 C
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
1 H1 [: ^- S, f+ ?6 W4 O/ \// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
0 w; q+ e0 u, p// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
( `4 q( h- p* Y4 }9 e- q// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT! A! f ]5 W# A3 h' |
// 为显示信息用,可以用其他方法替换如 TxtOut() 等% f5 H* Z) x$ p/ O% [" ?; M
//
. f# V) ~! |7 G1 G$ r0 K//******************************************************************//
. i6 Q0 `1 Z/ m. w
- z& r8 } ^6 v) z& d0 Y5 W. }//////////////////////////////////////////////////////////////////////
# a6 j- Q4 L# e5 ^//
. M1 P* I* X; z- ?. K0 Z// IM.h: CIM class (使用系统)输入法类4 K& Y7 d& L, D
// 2001/4/30 Write by Jerry Wang; ]( U% c8 {. n* V# z6 t
// 感谢大大鱼的帮助7 {" o0 l7 r$ L& r7 ?" s* I2 k
// Need Lib: imm32.lib8 X+ q8 W5 {' D# S) S
//7 u5 R% r; W5 M, o
//////////////////////////////////////////////////////////////////////& i7 A" X; X+ u& |1 B
5 m$ f& J9 @# N* z9 T- n7 i% N# L
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
0 X6 W3 f6 e/ K" j/ }2 q#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_
* v/ t8 t+ P# n" q2 m; s8 B m4 u/ V
#if _MSC_VER > 1000" O. o' }5 b% o. a
#pragma once7 Y. S+ L- |1 U6 W' k' k! i
#endif // _MSC_VER > 10004 K% P- r9 B7 O$ V0 d" h4 r
) D1 h6 u4 h* l* _% h
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数
9 s* k' x' f' X1 D
' x$ m9 v2 T5 b, u; L% R#include "FindMe.h". ]$ j: p# c! B/ X/ [) F; q5 G- W
6 {8 |' K2 s4 B- J0 e- \( R7 `
class CIM
6 l! k# [4 F- f' `+ D$ G/ y7 O% m{- v: K8 X) [8 u( ?9 N9 q
private:' {/ u$ j8 |1 L( F% Y) ^
CTTFFont ttffont; //显示信息
& X3 Q" L0 ]/ I, J" `# I, \ LPCANDIDATELIST m_lpCandList; //输入法候选文字列表# i9 e4 x0 J* R& \, p
LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针) y) x6 |0 Z' Q, J; U+ s/ i
LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针& Z" ?( _( R6 Z2 L3 Y* n) H8 q" M
char m_cCandidateList[255]; //候选文字列表缓冲区0 d4 X" T( c$ W: q8 D l6 S# t* E
char m_cInput[64]; //输入的字母
6 t, U& h. C" A1 a! g* I) E) F' G+ d, s
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串( J' c4 V# `4 T' J
$ \+ f1 i+ B0 _; E i$ V, f
public:! n; [3 v0 M) A! V, o1 a
4 H% k3 `8 V! m: F# d9 W
CIM();$ y: N8 R* N7 p
virtual ~CIM();
8 P: T: ?1 w% s% Q9 G
: p4 i) e! u* g; `1 N$ e, k LPSTR GetResultString( void ); //取得输入的字符串
C) x# L: ~ |5 G6 s1 h2 [# M5 _$ T! M+ q2 ^
void UpdateShow( ); //显示输入法信息
' y& C! Z9 c$ d/ _8 T8 n
; W2 Z0 H$ r4 T0 F& u0 l9 {4 u LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述
* {4 A" g$ w7 y- R( s; M! ? void ClearCandidateList( void ); //清除输入法文字候选列表
8 Y& Z# s) \# D BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表
- C" O5 [4 j0 J' P/ G; W4 D BOOL ImeIsOpen( void ); //输入法是否打开% ^* {! W8 h5 g3 S1 R' ^
void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息5 x; c \* R8 T% O# X
void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息) t1 K" F' @$ j- Z* X
void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息 }0 {$ ]: e0 k& W! _, p
};% b1 Y- d! j; R- y
1 m) H. O& D- h) N7 L#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)) x3 F6 W+ n- L$ `
- n" l$ v, P* }' I1 g- u" Y' j1 O9 [/ q7 y1 a5 w9 p& b
4 e3 s3 w& y7 ] x8 G//*********************************************************************************************//
3 a3 p) }/ h/ d) o9 u
+ t b% j5 F" U1 ~4 j//////////////////////////////////////////////////////////////////////
4 P2 t4 M8 A) l4 [& x//) y! U! \/ [" Q7 s7 X
// IM.cpp: CIM class (使用系统)输入法类
4 t; q) h( X' i, T& v# v Q# H// 2001/4/30 Write by Jerry Wang# B1 ?, }4 ]- i8 c# i" [. v& T
// 感谢大大鱼的帮助% Y& X( j+ ^; `: _3 |' r) h( `
// Need Lib: imm32.lib
* E5 @# {: U, W0 ?9 {//7 M2 k X A n1 o& V/ ^% C
//////////////////////////////////////////////////////////////////////7 x4 _" {8 [, A
# B0 j1 T; h" w
#include "imm.h"! o2 {) N7 C7 Y# [( E# I
3 e* P, x3 K6 e7 I
//////////////////////////////////////////////////////////////////////' c$ L; t7 C- u7 I
// Construction/Destruction6 B/ c- ?; C# e# M Z$ E4 u
//////////////////////////////////////////////////////////////////////) e# {: j9 X0 ]) W$ ~- e
9 N- A# j, X1 ]/ a) P5 }6 ^% ?CIM::CIM()
0 F3 P8 r [& M8 A1 q7 P{
4 W* O6 K& r8 q) a4 m m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
- i9 {4 _2 Y1 N8 y1 Z1 c ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
: |( B) a& `# F. ^& r o *m_lpszImeInput = '\0';" J( m4 ]; p& | Z2 e: `
*m_cInput = '\0';
, K j. S% o2 V9 }0 J& d* C: z! C1 ~
ttffont.Create( "黑体",15,RGB(255,255,255) );
6 M8 p( Q! o4 l* S" C" q- l9 ~ GetCurInputLanguageDesc();; I2 p$ n: P5 D0 K; Z+ n
}
2 W6 t3 P" H1 Z8 Y7 V8 o# H1 ~7 f5 u
CIM::~CIM()! ^1 z8 P" L- n J- a
{0 a# U \/ o* L7 z1 O- E
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );: P1 P( n! M+ {4 a
, k7 y; U4 B5 e( | CHKB( delete m_lpszImeInput );
- j( A$ e# e; r3 f if( m_lpszCurInputLanguageDesc != NULL )
( j+ H, D' L/ j7 v CHKB( delete m_lpszCurInputLanguageDesc ); . h8 u4 V2 n" f: k3 `7 ~6 |% u9 f
}: o& z) t% m y0 R' c- I& I
) M/ @, Y% m" [6 r g' Avoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
" J2 _) \, H1 w5 Y7 | |) H. }{
3 X+ G; T S7 G& Y" |& _ if (lParam & GCS_RESULTSTR)
, g+ F) X3 D' l/ ~/ V8 C {
0 A3 K# s$ h6 q" w/ V HIMC hIMC; //输入设备上下文! t$ N4 h @. _6 X2 r" P2 n
DWORD dwLen;
1 p/ T; {' L# x/ y LPSTR lpResultStr;
0 n5 k( D4 | A o4 R% d4 [3 {( X2 J5 U0 u
hIMC = ImmGetContext(hWnd); //取得输入上下文
: Q8 M3 ^2 x: G, ~1 h3 N' a
" Y' B' N3 X9 {) ?) R if (!hIMC)- ]& e/ I" D% p
return;
8 v/ m# C8 E8 b9 Z( X# {& `+ D6 Y6 ^. b' Y+ }* t6 \+ @" `
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
9 [0 }6 T) `7 r5 u( C dwLen+=1;7 G" Y, H, Z" T9 z
/ P; k8 ^; N4 d if(dwLen): V7 D& T; x/ F
{
% t$ K8 U7 h9 F- P5 y n+ m2 E) u lpResultStr = new char[ dwLen ];
2 L9 a" C5 ^% W0 ]% S! N( |1 z8 ^8 H4 U: K! `
//// 缓冲区已经满了
9 e& K' a/ ]5 N0 [/ Q" Q) e( u if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )$ w3 R7 U+ w8 q3 F8 T
{
6 r8 x; b1 m8 q8 X& Q MessageBeep( 0 );
; l% \$ t6 k# i- v D% F6 [8 W. Z return;
0 {& q4 h, J8 x- R3 q; G, f }
7 J( L0 |& h1 Z8 p ZeroMemory( lpResultStr ,dwLen );
, [! O: {" n0 y$ [ if (lpResultStr) L5 | x. s# {$ X9 G7 N
{: Q- `. {( i3 L/ _. a+ X
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);* T9 [4 _! M( u" d5 ]2 ?- ]
strcat( m_lpszImeInput,lpResultStr );
* ~) s; F' g( _0 a( W }
! x5 a8 ?* \! d% L delete lpResultStr;
- g: O2 D* _4 S! u7 G# f; i, }' w }
/ v) C9 j: S. S" S0 G% @: [
! {8 Y4 F% X$ h9 H8 D; r/ Z ImmReleaseContext(hWnd,hIMC); //释放输入上下文$ ~* G6 ?- C" B+ H6 P
}7 b5 ^6 U* i9 z; E7 s! N9 N
% } z1 _, |; n) h$ c
}( ]- U* i- q7 q7 U6 L
+ O) O) s5 z8 B4 R! r+ @
void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
+ I* b5 N7 n- _7 ]7 _{
* H, r3 [! ^1 A DWORD dwCommand = (DWORD) wParam;; H d X& P0 a' p3 d
switch( dwCommand )9 D! O; k) e) J# O8 X5 w3 Q s; L
{" o5 h8 w+ }, I: T5 M) v, B& ~0 n! I
case IMN_CHANGECANDIDATE:4 g! B+ P# L, H) B6 T1 c4 e- y6 M
GetCandidateList( hWnd );. }, @. K4 w! ]* v( ]$ S6 p7 h, l
break;
7 s1 E% L+ x3 N8 [. s; Q& T; _: h/ O/ i" S6 P( u {/ [
case IMN_CLOSECANDIDATE:8 l |) V! z; l4 F) k# M
ClearCandidateList();* b4 E( D) d' ]- U h' U/ U
break;
6 r x1 t. L. v* E8 p# q1 ^+ e" k
* K8 P) W @9 c' Z \) `' e+ f- g7 G case IMN_OPENCANDIDATE:
) c1 ^- _" ^0 n/ i& s GetCandidateList( hWnd );' A6 C4 p9 v7 Z& ~& Y. r- N
break;% B. I5 u( p0 d
}: ?# K5 t5 H8 y" B1 I: s
}1 Y' `' E+ @2 F6 T! N
$ M) C: u c3 a; Z6 R
void CIM::OnChar( TCHAR ch )- V8 n! b9 M7 s+ T0 w" f
{2 u0 c( Q6 M0 Z2 g
int len = strlen( m_lpszImeInput );
8 U# C5 I8 ^- S7 k: \8 h4 T2 X" d& O2 U9 L5 p2 g* i3 e
if( ImeIsOpen() ) //输入法打开状态
0 ~. t- Y- o& m9 I4 j5 d& Y6 D {/ d3 g" C. y" k( B5 i; m7 Z
! F2 p" p" { W6 a9 f8 { }
$ {+ m Q) i" ?) Z else //输入法关闭状态- Z( R4 o$ l' r
{
. G/ J* u- E$ J. ^" z if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母, W5 D; v+ P; H5 ]6 D. n; P
{
" E$ |8 X$ g/ v8 e5 y B *( m_lpszImeInput + len ) = ch;
7 j8 O- A" d/ A& g2 Y I *( m_lpszImeInput + len + 1) = '\0';( ^% e2 C2 Z( i) k# X* R
}* X2 J7 \2 v: `1 o& Y/ R
}
$ O/ y; b/ J0 d* j) }# y# l& d/ B! m Z! ^7 g
if( ch == 8 ) //BackSpace字符
; b/ r' t' T4 X {2 C4 h4 V, w6 Y! ]0 `2 ?
if( len == 0 ) //字符串长度为零. O; l6 z6 c6 Q
return;
8 U% K2 U' U T# p6 Z* L( o5 J6 N
+ \+ P8 S0 a# a# g if( len == 1 ) //只有一个字符
; \5 @" k9 ]/ n% Y4 h+ k0 p {
$ D4 j: g, w, {9 U: Y4 @0 ^# | *m_lpszImeInput = '\0';
+ V; _5 d' `9 e$ W& ~, C/ y return;
# g' j) x _. [" [7 f8 Y7 J }5 `9 q6 }8 `" S# a" l1 \
' Q8 p4 H B; k$ `+ ~1 u3 W. }; |
BYTE cc1,cc2;/ d( v' T; v7 ?3 P# u
cc1 = *(m_lpszImeInput + len -1); //分离字节' L8 T7 H0 q$ c9 v- @! g7 i
cc2 = *(m_lpszImeInput + len -2);+ n; Q1 Y& q' x9 K1 F5 h
$ w6 K G" t- S$ y+ I3 X if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0: \' F, _ x. ?2 R' V
*( m_lpszImeInput + len -2 ) = '\0';. g/ M }, {, J( E c n ~
else //是英文字符(单字节)) |7 U8 n+ x0 |- R# C
*( m_lpszImeInput + len -1 ) = '\0';
3 o4 ]8 Z1 o: Y3 p$ W1 W7 `1 b }- u* n) o' D! d- |! b; l
}+ q$ g7 }6 W6 H3 T8 R- e
4 [' K1 h `9 \0 L! F' Z) B8 C H
BOOL CIM::GetCandidateList(HWND hWnd)0 k1 D$ H. y( K0 c- q! e: ?
{
5 q4 S. m0 N b# K( h6 I8 z5 q8 z DWORD dwSize; 6 d* I6 j8 ]5 L: A9 h( \
HIMC hIMC;
/ _* ?: D' r# V; k4 d5 O2 ?; s5 I# {' {3 D m
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );: C2 e6 Y$ p' y& v( [
0 M% R- ^7 s; @( S
if( m_lpCandList )
: ?/ _1 U! h5 B' \) t# S {
" q6 S/ a" J3 r" l9 V; w9 h delete m_lpCandList;
3 _' Q+ l* S& e% j m_lpCandList = NULL;
* S$ e6 u, M( @0 J4 T }
( {8 y7 }5 a' D+ B8 S. G2 J' A5 J/ N' b5 [0 W! H
if( GetKeyboardLayout(0)==0 ), V1 o7 W: ~0 M9 n
{
$ x# s) e7 f8 K7 n- r2 R2 Y return FALSE;
5 }5 e0 w3 F2 @: d" F9 O }
( }# t+ @( N! v3 [. b& P& }9 T% s& E3 \
hIMC = ImmGetContext(hWnd); //取得输入上下文
8 S* P* R8 F* u if(hIMC == NULL)2 B4 u7 ?/ J$ f1 q
{
7 |1 C' N* b( z) N- S% L( b return FALSE;
, J" A% u1 T; \4 |* `5 N3 P }
7 K" ]5 ?$ y Q0 o2 R; O ?6 f2 ^
3 u5 b) y |7 J# O5 O ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );1 h, {" j7 O: n6 t1 s7 q
if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) 2 B6 p& k; D: B2 | s8 C
{8 K+ L: E8 Q! z. m% w
m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
- W3 p- Q+ h7 d Q5 B if(m_lpCandList)1 j3 H p( r2 A- W7 l o" \
{" r( ?( C5 T m7 f F5 ?% q
ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
+ U' H# N# p. p$ G& n# p CandidateToString(m_lpCandList);
4 I+ f+ `0 I. A0 G2 H+ _ }
2 _7 O( Y. W c" J } 7 i8 v9 D8 p) a0 P" H9 G8 U
: h/ [$ n0 ^' ?3 ^ m
ImmReleaseContext(hWnd,hIMC);
$ |; q# R1 q, G. v
g0 j8 f9 q( l+ j return TRUE;
$ |" W3 S& a) j: l8 ^}
. c5 _7 G8 A' `0 N! ^' h( C) z8 Q5 p( s; m7 K, a
void CIM::ClearCandidateList()* u* O" a$ `' P2 ?5 `; ]
{
" u/ ^# n7 Y6 w/ e& d: b6 ` if(m_lpCandList)
5 O% T" M! C7 k {
% |8 H7 x, `. C0 U delete m_lpCandList;2 M, K2 x" H6 N2 }
m_lpCandList = NULL;
; ]( ]$ D& _0 Z }
" |8 \7 ~% c+ D: I* m ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );& U' d6 [1 h& ?2 R8 O4 a) h1 G
}: e' |7 W- ?, |% _8 p
1 I8 F5 _& I5 M, E0 W1 o" X% ^, d) L' J1 Z1 V6 j( h$ g5 {. e
LPSTR CIM::GetCurInputLanguageDesc()
' j: C' D: H, i& [. U! o{, l4 U- d/ M) g
HKL hKL = GetKeyboardLayout(0);
8 ? h6 N$ B/ i: O9 q% U) d/ t% x# ^) o
if( m_lpszCurInputLanguageDesc != NULL )
7 x; Q# y# ~& j5 k3 S CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^) B- F: V/ n( p- {) j
5 [6 `( q6 M6 q
int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
6 v# ?# [: r- }0 o/ c* F8 I, S3 h2 Q4 W! Y' B7 \( N6 ?
CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );
3 m/ ]9 c/ e: ? Y4 ?/ o* Z$ m q7 K& v7 {$ F
if( lengh )2 P) o& }! K7 o. b/ {) p0 _: h
{
; [$ p& h7 x. m# B$ y* b* B" J' V ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);( q" _! h! e4 T: A0 L
}- f+ }: X9 n- n2 q
else. }+ ?6 q4 G) P4 r
{5 J5 n( r" C* {3 C# A- _
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );: [# W6 `- I+ f3 r6 T! _
}+ O) V* P4 `6 X
2 d; V g; d/ l/ m& O+ ]1 _, ~9 E
return m_lpszCurInputLanguageDesc;+ |4 m8 d8 N: W' J% v* a
}; Q8 J% Q. |# g
9 W" l H( x& K; r9 c
void CIM::UpdateShow()& }5 {' Y7 g: ]4 N- R
{
2 u. _, b/ l4 p% E- j POINT pt;
8 X6 y7 K* V3 M* W pt.y = 450;
1 X5 R4 q) D: x+ R% ~5 w- D pt.x = 400; 8 b4 W8 i4 B; b4 f, T6 W" B1 G
ttffont.SetSurface( DD_GetBackScreen() );
& i2 } C& Y2 [ ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述
3 C! U3 m, n1 S, ?- d2 x/ n+ h7 l( I2 c0 x0 I X! f' t
pt.y = 420;
# T6 ?* p6 H4 U9 g7 [% X2 v pt.x = 20;7 F& L/ G% F+ v* q2 B! {
ttffont.ShowText( m_cCandidateList,&pt );9 k2 P" E4 O; T; z/ O$ q4 [
$ x5 ?; t7 q7 w, J0 ]3 x5 h5 n
pt.y = 450;
7 R! O6 w9 U; w" ]% |. T4 ? pt.x = 20;" H' }# z# n8 \. c8 J9 `8 G5 J
if( *m_lpszImeInput == '\0' )$ l6 s, i% X2 }: l, }# E2 f% R
return;
6 |' v# O+ ?: ~: G* \, Q
1 K' _5 F k) s1 k9 g7 V0 I ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字3 O% E( A3 k! X( m3 q
}
+ z0 k" }$ Y- F8 T& C3 \ Y( A1 ~0 ^6 R$ _9 n* u5 R
LPSTR CIM::GetResultString()
' k' N- C, M) N. O{
* O N3 q9 P8 }$ w7 d return m_lpszImeInput;0 v3 J0 }0 w! S
}( T- U$ s- v9 a7 _+ M/ ~! c) j( P
% r0 T! M, L; X; |+ B) q8 w5 `; FBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)
) [6 p% _" A* W. C$ ?3 d{& v/ P/ K5 ~4 U* q8 _9 ~$ a/ U
if( !m_lpCandList )5 d! B1 g0 a9 F
return FALSE;: ?9 F& ]0 I! O- i2 E+ K/ ~' G/ f0 X
1 K* r' l- u6 |
if( m_lpCandList->dwCount>0 )
0 w1 a! }$ t6 Y9 K! y& _ {
- G- G( I/ v7 T7 Q( R' Z+ J LPDWORD lpdwOffset;
- c6 {$ I b4 K; H. Y: R, D; R. c7 H1 n8 z4 ~ ?
lpdwOffset = &m_lpCandList->dwOffset[0];7 l# G0 K& N0 A/ F; U
! g" c& W Z3 s8 {' n1 p5 f! h lpdwOffset += m_lpCandList->dwPageStart;6 X* C2 h! _; N" N4 T6 H# T$ _
, N* n/ U' H; K( J ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );( D- v$ b0 _0 n+ f
& c$ n! Q' w `/ Y; \& [ DWORD z=1;
$ n ]! `8 Y3 i/ E3 I, s( W for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++)
1 E( _; \7 e8 D- _+ J7 |/ b { - y- t" s* O8 ?
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;
0 e3 ?2 T2 P3 {" @ o4 U N char buf[255];6 H) |8 c/ H9 Z( Q% Q
sprintf( buf,"%d.%s",z,lpstr );+ Z5 M) i' k0 X4 j! w2 a, ~
strcat( m_cCandidateList,buf );1 b( V: h. b0 N9 v
z++;
1 z6 {; d0 b* a& |& E! ] }
2 m9 K8 J9 ~7 e* S1 P- i5 N; t; x& [! r# w
return TRUE;1 b8 a6 n8 O6 z+ e/ c
}
) p* x/ @% Q) N4 L/ f
' [) V2 S/ [" \' {. F return FALSE;4 L4 B; \) S/ G! `" s( ^3 z
}4 s# d$ l: m8 U7 q! }2 e- J& [
+ n. e0 ]: j& T" X
BOOL CIM::ImeIsOpen(); R1 R' r9 X( r
{
1 }: p5 ]0 X/ _5 @$ m+ A9 d return ImmIsIME( GetKeyboardLayout(0) );
. W$ K' r3 v# s5 v, j7 T} |
|