|
|
//******************************************************************//" p9 o6 H2 X" z8 @
//3 s7 d/ u# T2 T9 I- e {, W# N
// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家
+ E6 O/ R1 G1 P, Z// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)+ z2 w; c, S4 E7 r0 _$ C( y; k
// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net
* W" m0 M, c7 Q5 ?- [6 Q// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT
' U8 N8 N1 I- N$ y- N! l- ` J" d# l// 为显示信息用,可以用其他方法替换如 TxtOut() 等
7 L# R/ v7 w W//" x7 x. \, Q/ Q; m0 @% D, q
//******************************************************************//
W" n0 B! z& C% A+ X# u7 n5 m9 `: h3 M8 U8 b( U) i* X+ ]
//////////////////////////////////////////////////////////////////////
- v& g1 K5 p% C0 Y% g& V3 f; }//
0 J' L' S* G! X// IM.h: CIM class (使用系统)输入法类6 `. y4 D" c( {
// 2001/4/30 Write by Jerry Wang
. u! Z6 F1 z0 T0 e" y/ h// 感谢大大鱼的帮助
- w3 e4 a1 c, n! V// Need Lib: imm32.lib
+ e% ^+ ^& ]6 t( H8 P//
' w% ^" l1 y! N) S2 s( a9 l0 r+ ?//////////////////////////////////////////////////////////////////////
) S9 B2 H/ I/ q2 V4 l# U# Q- q2 B1 b+ Z
#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)+ _) B0 ^: n. G5 }
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_
- C, T9 S# }4 H, j
+ Q* _/ ^/ G6 J! O6 D, `2 X/ y#if _MSC_VER > 10008 h" l: t/ D0 b7 f7 M+ ^
#pragma once, p" v2 n- G; ]1 w9 X4 U; G, q
#endif // _MSC_VER > 1000/ ]8 ]; @8 U! ^, W
, R$ M* K1 y# x* }5 K
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数! {' k; G; N" t3 m
6 x9 p" p g+ F
#include "FindMe.h"
! k* |$ n A9 T$ \) P9 {* X; R. w. a4 b) c
class CIM
1 \' x2 Z7 u5 W{0 @" i$ ~' E" e2 E% H. M
private:& [* P; `9 c3 W7 d9 w* P
CTTFFont ttffont; //显示信息
4 t# ?, @" Z' i- h1 V6 A6 t LPCANDIDATELIST m_lpCandList; //输入法候选文字列表
i3 C5 u: E0 b& ~1 N LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针
6 z8 U* z% v- g" P( k( j LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针
0 e6 | x" u9 v& T0 g x5 s char m_cCandidateList[255]; //候选文字列表缓冲区
3 y% W+ G3 A7 G6 s- r char m_cInput[64]; //输入的字母
+ s w" f) W4 v9 [. C, h0 u0 j$ V) Z! n# g1 T) J. f2 s- Q
BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串, s; Y, w& m- [% Q' m9 C( z
) F9 {' X3 J9 I5 R' Y8 j
public:$ C) Y. K2 {9 E
" q& F- _4 h4 R9 ~$ t! \
CIM(); t" m8 ^8 e0 ~1 M$ M) `
virtual ~CIM();
" ~7 |$ i) L- E- E' g9 \
! X7 P' C$ H& ?) ~( X LPSTR GetResultString( void ); //取得输入的字符串
# S5 |+ R8 V0 X/ ^9 [1 h( Y2 V% O7 W: I5 g. Y
void UpdateShow( ); //显示输入法信息
/ q# B2 v; G' h* M& J6 e' E+ D! a: |( }5 X, Y& ?4 l4 D
LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述
, v9 e7 d6 ^# ~4 s" C void ClearCandidateList( void ); //清除输入法文字候选列表1 I% C1 b( J' G, E
BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表/ T2 X3 a% G" `5 |
BOOL ImeIsOpen( void ); //输入法是否打开% z* l1 I7 C* f! V- g4 X, |
void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
$ ^: N3 h% D: ]( r7 h; _4 B void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
, n0 ^7 _* ]! g6 S- M( l% ], Y$ R& ~- m void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息
1 v) f% A3 h; [1 D};( ]- M' K/ j3 I
3 N- h4 d( }# O# C; `
#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)1 P$ I- G) T( L& ^% ?
, N q5 W1 c& j' \& A; ], ^- B
4 R" Q- o: y$ f* x' ]7 c! t$ n2 ^$ L% t
//*********************************************************************************************//
; Y5 s. K$ C; G! X' J% l3 l$ s H' Z$ E- a! _5 [% K
//////////////////////////////////////////////////////////////////////
$ R7 {& r+ ~! v3 w# }9 j//
+ `( B+ k$ ~! \) _) \; g// IM.cpp: CIM class (使用系统)输入法类
; ^3 |3 [+ f& H+ |- S w+ J// 2001/4/30 Write by Jerry Wang
/ |' s9 a- f/ \4 A0 c// 感谢大大鱼的帮助
2 l5 S/ D6 a4 |+ Z0 {; A' I* w// Need Lib: imm32.lib
, |. o8 }+ p% q+ a, m5 h//1 X2 {. O3 w2 p$ F: p! X
//////////////////////////////////////////////////////////////////////8 E$ X# g& e6 o7 V& a8 u
* V5 J* l9 ~! R- ~6 V#include "imm.h"
% u* X0 k) e& G
: d) r% \! N$ ~4 ?7 q( h//////////////////////////////////////////////////////////////////////& J4 _0 a; F: y2 N
// Construction/Destruction% x; h: i" B4 C8 m8 y
//////////////////////////////////////////////////////////////////////
& V% I5 h. ?7 l1 |3 p8 A# x
. `9 y9 e# o* N+ k. JCIM::CIM()0 _2 ]2 k$ H! W2 f" }& w; P1 Z! e9 m
{
2 t7 |4 J; s0 j8 r' @+ s m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];
0 x" d+ f) ~+ F y( t' n ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
% F; T( N( _2 [- @8 h5 T$ d) X- ? *m_lpszImeInput = '\0';
, P- U( V6 l& e% G$ x. j' O0 n *m_cInput = '\0';
0 r: T, h# Q5 D* F2 n7 R. W* x. N" Z! e7 _# P. m
ttffont.Create( "黑体",15,RGB(255,255,255) );# s* |, G( D$ h# p
GetCurInputLanguageDesc();
& K. Y/ ]4 @, E. n1 I, w}7 _+ s$ p2 z u# }' Q% n
$ T; s. m0 a6 c. DCIM::~CIM()
6 d- Y% D4 e3 ^9 }1 ~3 ]{
: P$ g0 \: k% j% W* l2 R9 Q- o ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );: e R/ R. F2 U' Y% M) |
$ b. _5 x: [; ]' x
CHKB( delete m_lpszImeInput );
1 H4 @) M4 q. y- Z6 i1 C. J7 q if( m_lpszCurInputLanguageDesc != NULL )0 }/ c8 N# I) c' Z
CHKB( delete m_lpszCurInputLanguageDesc );
% }- S9 m2 M% O0 u1 V2 Y. H9 Z* f}
2 @6 C1 D& A/ G% a; Z8 b9 M
6 v1 q% ]4 X" ]* b% h7 e' F. bvoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam): ^3 c( Q0 ^, V( b7 _* U& T5 w1 S
{
% m, X- c& @4 C, ^: ^( \ Z if (lParam & GCS_RESULTSTR)$ n! d" d! g/ h/ W
{. G/ s! N, Q( q. t
HIMC hIMC; //输入设备上下文
+ w, ?7 \, l7 Z& A. H: T DWORD dwLen;% y9 t. c, A: Y3 x
LPSTR lpResultStr;
) N' ]0 q; {% }8 z) l3 r9 Y8 G! s3 ?* S, U% s% g7 {. f0 s
hIMC = ImmGetContext(hWnd); //取得输入上下文" f7 ]9 ?) Q) u' j8 R) B$ T
+ _4 {5 D! j# p2 e: r( z if (!hIMC)
/ ]5 ~$ c; F- K% X3 @$ m0 ` return;' Y7 _$ l' n. ]# K" Y
- V4 s9 u! L7 n5 Q! r J; ?7 V dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);5 E. l, G4 e n O% B% x$ |4 _
dwLen+=1;
" X' p' _0 m$ M$ L/ M3 m' a6 D) a6 ^4 p
if(dwLen)
8 o ]4 M, q \) k" `' B {' D7 M. I. J0 q
lpResultStr = new char[ dwLen ];7 s- O- G% ^9 Q9 z1 j: k9 t1 q8 S
" |0 o* W& ?2 c2 J) z' Z
//// 缓冲区已经满了. y5 M5 E) x6 o# Z* B9 J9 U
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )& u/ Y H, L$ k( N
{
! X ^2 J( s5 ?9 [8 C. S2 q t MessageBeep( 0 );
- }# F0 R& |. g- O return;0 C; _, t K5 ^& r, l9 W
}' b0 q+ J, @7 s+ m$ r. ? P
ZeroMemory( lpResultStr ,dwLen );
5 a1 }: F1 g ^# `6 l& ?! N if (lpResultStr)$ l* [; B" [' R" Y* p9 u* O
{
$ A E% E% j$ u$ A5 ~! E ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
$ i* p+ n5 ~. O3 M _. w strcat( m_lpszImeInput,lpResultStr );3 W% O7 D7 N+ F; j3 i, Y
}
# z& W* H" G F. J delete lpResultStr;6 o* |/ U3 e6 h. ~' y
}4 C5 Q7 d0 S9 \$ Q+ u: {9 z
8 b' A( }6 U+ y0 c7 g ImmReleaseContext(hWnd,hIMC); //释放输入上下文
3 b% E; l4 |/ N0 h+ K) m }' t& Y; O9 A8 q
- |/ D8 _8 t+ R2 L3 p/ L) f- }
}
7 b$ ]' r3 r s) b! a- g8 O' Z/ K6 i% s8 p" c. O [& ~/ @
void CIM::OnImeNotify(HWND hWnd, WPARAM wParam)
% |' n* [! D- f' p9 P{
# G7 d1 e) i7 |% m! P0 V+ G DWORD dwCommand = (DWORD) wParam;
. W6 \! ~% B) O1 f& U: l$ P* T0 v1 q switch( dwCommand ), X2 y* H% `0 [
{# V' G, r9 M- k7 O
case IMN_CHANGECANDIDATE:
0 @- R: k t4 ?/ |; W6 K6 I GetCandidateList( hWnd );
2 }( m0 A# B f9 B7 W9 Z* H; d break;
+ u* H% e7 |$ ~2 W! ?) _& `0 m$ c$ W( `3 A% u6 V d- R4 z
case IMN_CLOSECANDIDATE:
- A5 _& Q7 r+ a( ] ClearCandidateList();
4 f+ P* f3 Y9 X4 `+ x( b/ _ break;
$ m* @) U, q, x3 `& a: X: g1 ?) ^! t O" K1 r# K
case IMN_OPENCANDIDATE:) `# d+ |0 B k; T: w+ \5 Z
GetCandidateList( hWnd );, y V' D; o k3 R# `" U: o% f
break;
4 q1 C. b( S2 P4 I8 R/ z0 n }( b, F3 z! A7 y# y7 Q! l9 H
}/ n9 D p5 i; t3 d# U+ ~! }, M
; c* E) P$ `2 O2 t9 f5 b+ v nvoid CIM::OnChar( TCHAR ch )
, j/ j2 W, I* [# U& \ U$ I" T; ]{* P$ Z& q% a+ P/ y6 h z* _7 E
int len = strlen( m_lpszImeInput );
, c! j ]3 {" ~! X% Z5 @7 y @3 D9 ~; P* |$ W9 B
if( ImeIsOpen() ) //输入法打开状态 | D) c- [8 C4 w
{
% R; ]* C; V9 W F. u; K0 c& G8 g& w' C
}
0 U2 C; B( n. B- @3 ~ else //输入法关闭状态/ m3 C+ l$ X6 i7 Z# K" w
{
( \! V" }2 ]1 Q2 f9 W if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母# z% X' S8 F: a4 O
{
2 |- Y4 ]! D, Y *( m_lpszImeInput + len ) = ch;
' u% K( t( {# w" E. i9 g/ B$ x *( m_lpszImeInput + len + 1) = '\0';: e* C) o5 }: K! x2 E6 F# Q
}7 [. J- U. @7 j1 D
}
! n8 e# K& x+ I8 [7 T8 \- W
! C, X% i/ }" Q5 Z) ^ }( K0 @2 r5 O if( ch == 8 ) //BackSpace字符' N6 o8 M5 k- J4 k3 f: q
{. T# h5 `* T" l- Z! t; J5 ]) |# |
if( len == 0 ) //字符串长度为零
+ s3 p$ ^9 O4 I8 s# J. I9 P, j8 S return;# i1 t0 i* [" d: |0 Q1 ^+ Q
, N6 j. |; [8 |1 D# `/ H& E. | if( len == 1 ) //只有一个字符
0 W8 e* R4 d5 D6 ]9 C {4 C" |4 W) l0 Q2 p) W
*m_lpszImeInput = '\0';
1 a, n2 a3 e7 ^3 n( U; i return;; D5 X R4 h+ V: w! u# g
}( _/ f! \! S: Z5 a }8 j# c
$ B- a+ C v1 s/ B0 L' M BYTE cc1,cc2;) u# G' C4 |7 t7 n% G
cc1 = *(m_lpszImeInput + len -1); //分离字节0 p2 p8 c& l L7 ^. K# t2 A
cc2 = *(m_lpszImeInput + len -2);3 i3 B* k6 o" j$ D. v' Y
9 Y C) u4 J+ T if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0; o3 Z# s5 d9 O! D4 j
*( m_lpszImeInput + len -2 ) = '\0';& G) A/ s a$ w' B8 f
else //是英文字符(单字节)
# V, v4 {+ v/ q. @0 m *( m_lpszImeInput + len -1 ) = '\0';: {0 l1 ~+ ~' z0 r# U7 c0 l! f
}
9 S6 b3 ]& u3 k. _5 B( G}
2 Q% `: L2 D4 I6 g, a# W- \ _
; ]. l7 ^" \. xBOOL CIM::GetCandidateList(HWND hWnd)
( A4 k- z/ [* S3 ?! J+ n% D' } C- V{" x0 Z' n" O4 R. N" K& y
DWORD dwSize;
* r; l' T4 ~/ V0 \3 F- E HIMC hIMC;" S7 P3 c9 }, K1 `
$ ~$ ^/ U, G h& m ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
: X& N: r: T' X, @9 P( [5 J
) m* Q( Y/ B! r6 B, K% I if( m_lpCandList )4 h, L# ~" {5 p% j9 T5 y L A
{
! S: M4 \" t& Z, m* P+ K1 m9 F4 ]% m1 D delete m_lpCandList;* R. G6 }$ B5 n: Q# r! J; s4 g
m_lpCandList = NULL;. n- M8 u) q* C# d& D" P! p
}
1 z: s( [& g+ e: k
& W0 y+ }( G5 _8 c' g if( GetKeyboardLayout(0)==0 )4 P- q" M) l3 z' h9 Y" @
{* O% m' F' }4 Y1 o' R
return FALSE;3 u1 Q9 N8 e( T2 s7 x; K3 U4 S
}( C: B& _1 @4 H* T
& H0 e! U+ f6 P# a* m hIMC = ImmGetContext(hWnd); //取得输入上下文
/ B4 a& p, e* l6 }" O& s% ] if(hIMC == NULL)
/ a" S" l a, X" d {
; l; a5 V; {: q# g, [ return FALSE;
: x; y/ x H; r4 m/ ^ }" n0 k) N; p8 L8 i$ f% t& `, J( m5 v3 r$ z
/ h2 ^# v9 s B& o4 V N0 n6 n& c
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );. T6 ?( Q1 s6 [* {0 q( @
if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) * n% W4 n1 s. A3 j% n) O I2 h
{% V) V$ h/ i0 I
m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
8 [ M) g5 ]# v, Z if(m_lpCandList)4 }. C( H# t& M1 z3 F( F; a [
{) T( a$ w! E# Z( Z- h( }
ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);. r! T% I, G/ {
CandidateToString(m_lpCandList);
% f/ _2 u$ `1 u X J3 e, F. U }
% |1 w. f1 k% {5 z }
" U( @. U% R+ N& }, I) G, w O
: c' S0 a- f0 P( D8 g" c ImmReleaseContext(hWnd,hIMC);
- D9 }) c5 l/ ?$ ^0 w) `: ]$ a- @! R: R. X, a6 h) n' N, e
return TRUE;
2 b: u! x. Z8 Y P- H7 _}
# n- i4 E2 l7 n+ w8 y Q1 @0 _2 j1 i
' e6 k4 }# i# `: Bvoid CIM::ClearCandidateList()
# Z- h* G: i. C- O% m F3 {5 z{
) ` D: r7 j: A1 {+ O# d F9 z if(m_lpCandList)
1 K: t# [; H$ {% a {( \+ t7 ^- o" R) u' z* h# x2 S
delete m_lpCandList;
, d4 Q2 }* b/ q" H; y& n m_lpCandList = NULL;
1 A1 H; A( M' P2 f }
9 n( { B( |2 W9 O9 w# x ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );' R1 t" L$ ]/ x
}3 m- Y- W, a! Y# J6 |
$ G4 c" u) T! {) I& E; S8 i5 \
0 N$ |6 F4 }% f. ^6 d% K+ _LPSTR CIM::GetCurInputLanguageDesc()! J) X" i Q2 p. ~
{
4 O- ` s# @" | HKL hKL = GetKeyboardLayout(0); : K3 J& S5 b0 r1 O
1 _: `5 d; b: v- [- D q if( m_lpszCurInputLanguageDesc != NULL )5 _# Z$ J) W( T- ^% x6 |
CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^; s/ J% f, {% l/ m
, n( v# ]0 i! e% s int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度
& {- H& q* Q; ?0 Z& ^: k1 @6 Y9 Y3 e, E' w" E" w3 [/ q4 T
CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );( {8 q9 g+ ~" }! e
% I" q% ~! \1 D% D, n! V if( lengh )
# o9 S" ~8 b* m& a5 O$ }6 Y8 ? {6 D4 t" Y5 `0 m
ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);0 S( |- _: B! y. O6 n
}2 Z2 A& [' x9 c& Y, e
else
0 N' I/ G3 d0 k& z! N. r3 U {+ F: ?1 `2 H6 ]8 m+ E# K1 p
strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );
, Z$ H; `$ L' [: C! I, d3 X }
# e; p. x! v8 C* \1 u2 y6 ?3 _4 r+ q* |! j
return m_lpszCurInputLanguageDesc;
9 B( O7 J: Y, d}
- s1 ~- [5 q/ q2 t; d. V1 Y0 L( Z9 C
void CIM::UpdateShow()& v. J# Y; H( }. Y H8 X
{
# U# h8 X, m2 }% e* x6 l" p$ q* p4 y POINT pt;
M" M. \. g% ^1 ]* F$ { pt.y = 450;
% k9 X q+ j' Z pt.x = 400;
; f( o$ h0 x7 C% L ttffont.SetSurface( DD_GetBackScreen() );
% `4 `3 m. ?5 h4 S- k8 ^) d9 F* | ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述
\' g. I8 { p8 p( @
* b/ {; I; Y( ~& ` pt.y = 420;3 t% ^0 w2 p6 Y2 ~/ D
pt.x = 20;8 c% F% R$ U4 S/ T- u+ i
ttffont.ShowText( m_cCandidateList,&pt );. y# {$ w7 o! ^
* D0 o# y9 Q5 @% e I
pt.y = 450;
* O4 q& y9 ], s# \2 E S. ^& M pt.x = 20;
1 \2 t: F7 x- [ if( *m_lpszImeInput == '\0' )
S5 L) p- b8 u4 n* l* r; X3 G return;
5 x9 ~. L) T2 @
# s) M W) ~4 a' ~0 E ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
& c% y$ X4 T2 z% @} }8 {) z/ O# b& S, T5 s) x
( y+ O i, {0 W; L# KLPSTR CIM::GetResultString()" b) }: [. P' C
{
: L5 U( b# s/ F: [6 y return m_lpszImeInput;; _7 i: }4 l" d9 k$ ^5 ~6 v
}& [: N) S* a7 P( O& R
, `/ O3 R, d( BBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList). u' G+ g! P* \/ N% }1 G7 `; ?
{7 u: I8 o2 [$ o- @9 L4 M/ l* S. P
if( !m_lpCandList )
/ g0 r- b) ]5 S8 R! { return FALSE;$ }: T- v- I6 B+ r
~! C" | c2 s0 J
if( m_lpCandList->dwCount>0 )# y, O& z# \7 f' u
{
" H* e1 Z+ ]8 H4 q* ^( u LPDWORD lpdwOffset;
8 m$ `: q( `2 m/ l2 X) @' R
) G1 a2 K9 t* A/ [4 @( R' C lpdwOffset = &m_lpCandList->dwOffset[0];" r: }: }( _& ]$ P/ G
6 l7 O8 Z9 B$ w Z1 ]- v4 A9 W, z
lpdwOffset += m_lpCandList->dwPageStart;
3 s% U3 o9 J, P, V3 @3 n. K( _* E5 H- o3 D- L/ Q. ~
ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );( o4 o% x. {! V& s0 e: y0 [
, [! q" K, K8 N3 t& e8 X, z% G DWORD z=1;3 l I8 q: M2 g- n8 B; K
for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++) 0 D* {: ]5 G- I
{
! ~) d% u S8 t: b! [ LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;
+ {5 d" G+ _; b" f/ e0 [4 M! k char buf[255];
5 S/ h% y# g4 |- k* I* V, | sprintf( buf,"%d.%s",z,lpstr );# F# T1 |: @4 a: g% V
strcat( m_cCandidateList,buf );
* X2 q: U1 [0 f- L, K8 Z& Q1 E z++;0 g' M" P4 f4 o. z: p: v" Z
}
! `" P+ P" W' D" a0 u
. T! m: ]. }0 C$ V0 C return TRUE;
" W3 T( `# c ~! R, m# {& P }4 |% n6 S1 c; Q9 s1 j1 S* I" [# J
. c0 k7 [! G- i0 X& j$ \
return FALSE;! k: [$ p4 e9 l' W; s
}
3 H: E& L8 Q0 j* R. w3 H. ~
, S" m( y, e: p' Z6 q: g. z; [BOOL CIM::ImeIsOpen()( Z- ?* o$ |/ ?$ W K
{+ L, O) s2 s1 @' i Q
return ImmIsIME( GetKeyboardLayout(0) );# _9 m1 y7 [ D2 I: V* R3 x7 F0 S. W
} |
|