|
|
//******************************************************************//. L/ h% Q+ J5 ^7 X2 q+ N9 }
//
% E- g2 K0 E& F// 做这个东西的时候得到了论坛上网友的热心帮助,整理之后再送给大家: a9 `0 f* p0 v) {' p* c
// 这是个在DX程序下使用系统输入法的解决方案,可能有little bug :-)
" b$ U8 |* w9 e4 f& N; c// 不过还没发现,如果发现了,告诉我啊 jerrywang@163.net8 c4 o8 ~& K' F1 R( ~
// 程序中使用的CHK()CHKB()是为了监测内存泄漏,可以去掉,CTTFFONT
( d2 }7 _5 x( [8 P5 F// 为显示信息用,可以用其他方法替换如 TxtOut() 等5 l8 Z! X, y/ O" c
//
9 A6 q, l% m0 a ?//******************************************************************//
" X4 D/ {3 s6 _. T5 D( Y& j# r) M5 n3 i" Z4 @+ t9 r" K+ V1 b
//////////////////////////////////////////////////////////////////////! t8 J" W* e' a3 C4 p# P) r
//5 g% W2 l* B; p7 I) E
// IM.h: CIM class (使用系统)输入法类! c" k ^- \0 k
// 2001/4/30 Write by Jerry Wang" j0 X: y$ z5 O% h
// 感谢大大鱼的帮助% Q! \+ ^: c* A0 f/ h
// Need Lib: imm32.lib
5 V+ k' P9 U" c: E9 |//1 _, f6 U6 O- f' B+ i( s! o
//////////////////////////////////////////////////////////////////////
* t% S" r( Q& [7 w' V7 \$ R
, t( s( n) m, `5 g' @& S' k1 r: h# L#if !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)6 }5 u$ m# n4 R
#define AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_
& @* f2 g. |* p! A
# S$ b. G' F6 ]0 L7 m- Q7 k; a: v#if _MSC_VER > 1000$ J4 v3 k7 F- z2 f6 v
#pragma once' `2 L O/ u9 D: D {
#endif // _MSC_VER > 1000
. I( I8 \+ F4 e Z4 K# Y1 t) A4 d* ?. p& W+ \) r2 Z# X2 t- U
#define _CIM_MAXINPUTCHARNUMBER 24 //最多输入的字节数
* f1 e3 |- Q$ ], u0 V" U ], l3 ]3 D, J! f, F
#include "FindMe.h"
. u s# d* j4 w/ Q* L/ Y) O
$ b/ I) X9 t" }1 q Oclass CIM ; P/ @# E' H8 g0 P6 ^8 X1 F9 P& ?
{
: J# R" N1 L. @: S( ~private:
7 F$ V, \) U- _) C3 y" ~ CTTFFont ttffont; //显示信息
$ `0 |! I5 d8 }; w1 O8 ^ LPCANDIDATELIST m_lpCandList; //输入法候选文字列表
) O% B. i3 r. H0 F LPSTR m_lpszImeInput; //指向IME输入的文字字符串指针1 t; {, \0 h$ b
LPSTR m_lpszCurInputLanguageDesc; //指向当前输入语言描述的指针) c- a) X. j" C2 I
char m_cCandidateList[255]; //候选文字列表缓冲区
, Z+ J6 I. l2 w( C char m_cInput[64]; //输入的字母$ p% z- @& S' s1 d
9 V; P7 s* x& A g* j5 W6 Z' _ BOOL CandidateToString( LPCANDIDATELIST lpCandidateList ); //转换候选文字列表到字符串
+ L# @8 k" }; K7 r3 x1 t9 L8 a! W6 N3 e
public:
; i) v2 Z- p3 Y1 M. z
' r) M8 v/ _ @ CIM();1 S, J: ~' i' N& t
virtual ~CIM();) }' E! Z7 C6 y6 D& \
9 x9 a3 D7 l9 B5 G1 Q LPSTR GetResultString( void ); //取得输入的字符串
: F4 p' x- z& q ~* l+ W7 w
* v7 S6 l# J: d* h void UpdateShow( ); //显示输入法信息1 Y( l7 r( w3 L3 Q9 m
4 v! O6 o( V/ d$ D8 F* m" L
LPSTR GetCurInputLanguageDesc( ); //取得应用程序当前使用语言的描述- |' ^! O7 ^4 q2 ~# M
void ClearCandidateList( void ); //清除输入法文字候选列表
) y. k, C, x3 t2 L9 M. |( K. r BOOL GetCandidateList( HWND hWnd ); //取得输入法文字候选列表, i" Z! {" g3 t( Y9 m
BOOL ImeIsOpen( void ); //输入法是否打开+ \3 D, W, P; f& l# Q; K3 Z6 t, }
void OnChar( TCHAR ch ); //处理WM_IME_CHAR消息
- a z: H8 d Z9 O& e8 _ void OnImeNotify( HWND hWnd,WPARAM wParam ); //处理WM_IME_NOTIFY消息
5 O9 {- j/ q/ W3 W/ e void OnImeComposition( HWND hWnd, LPARAM lParam ); //处理WM_IME_COMPOSITION消息$ R- j/ j( B3 ]2 _5 x. T
};& ?" x9 W; C: \3 E1 C' z- v
5 D- k7 {* v5 p7 |. b#endif // !defined(AFX_IM_H__6887B165_972D_4D17_8A75_FE07930CE59C__INCLUDED_)
0 S: F# ? k' j
: A V( t4 @0 }! S- I. g* Z D0 y$ {5 h+ g& L% o9 W' i! s
, p% d# g" G% z$ d! G//*********************************************************************************************//5 X0 r) w. x. t# [1 U
/ A/ r( Q8 }. k; ~/ K
//////////////////////////////////////////////////////////////////////% @' ?4 ^8 m0 a9 G' D7 G2 ^9 p$ F
//
- X' y0 e4 a+ n/ j% X// IM.cpp: CIM class (使用系统)输入法类
+ O" v& c3 A d// 2001/4/30 Write by Jerry Wang) ?6 ~9 ?' O8 A# f' ^( H# v& L, S
// 感谢大大鱼的帮助& f7 u0 j9 e$ d# R+ k
// Need Lib: imm32.lib
: I E2 v0 s' i$ M//
7 o. s! [0 y' h! p2 Z//////////////////////////////////////////////////////////////////////4 ]8 M) m+ i0 t: n T: ~ w, m
2 o1 c0 L r2 p* G# X5 N8 x& Q: v2 F#include "imm.h"+ t5 q& K6 w, B" f8 m5 ~
+ p! Y. C" q+ K' G, V8 J- `//////////////////////////////////////////////////////////////////////
0 v8 `* F. y7 J5 J' ^// Construction/Destruction5 w; P) k: r2 X+ t/ \' N8 j4 s
//////////////////////////////////////////////////////////////////////
$ B) A( d6 q/ l5 w7 d: u9 X( P- F0 {$ J3 C
CIM::CIM()
' @8 V- \5 F& b( r4 }& b+ L N{. p6 X3 A. d( _" ]+ o( Y
m_lpszImeInput = new char[_CIM_MAXINPUTCHARNUMBER];' N4 y( @3 q' d6 R$ F& U& d5 o" I
ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );
$ j. {& [5 u) J8 Z: ?- U5 g *m_lpszImeInput = '\0';
3 n( f* Q+ F" U. f# w *m_cInput = '\0';
+ o" e3 |! Z- y5 J: s9 A$ y9 z2 k8 I5 @- q$ k) a
ttffont.Create( "黑体",15,RGB(255,255,255) );
, w* ~) e. J7 T; i' z GetCurInputLanguageDesc();& x, Z/ ?, |" y
}
' P/ ?4 E& I! B3 r8 k7 h" F6 z
( Z4 Q4 A) C6 Z4 G9 \) Z6 F! KCIM::~CIM()5 D2 `% O! ~( m S# x4 k& y! O/ x
{
' D4 I0 z' o5 M+ H ZeroMemory( m_lpszImeInput,_CIM_MAXINPUTCHARNUMBER );' T+ f+ ?: e' l: I
. A( Y0 }# w. u6 A CHKB( delete m_lpszImeInput ); 8 o( M. h; {5 g: y3 C
if( m_lpszCurInputLanguageDesc != NULL )6 O- H5 g; n: X8 b/ s& U9 y; q: E# y
CHKB( delete m_lpszCurInputLanguageDesc ); ' e- o6 t5 l$ J3 c! C7 n; L& b
}; N. ~ s( [4 k) u4 t J w: [
4 p% X- q5 w+ v) W* j1 s0 ovoid CIM::OnImeComposition(HWND hWnd, LPARAM lParam)
7 w* Y0 i$ D& g/ y! }( Y9 G9 ?{* K9 |( I( O& A6 c5 Z
if (lParam & GCS_RESULTSTR)3 r6 ~+ m! @9 O8 T4 C+ Z0 ?* I2 o! ?% ` d
{
! q2 k" {% ~2 k+ A a( u) u( u" _5 J1 F HIMC hIMC; //输入设备上下文
* H3 E' w* w( {9 A! h) w( i DWORD dwLen;. Q1 s' M4 p# ?. B6 H
LPSTR lpResultStr;
4 h) S! [, I7 i5 A' ^* O$ L/ F! m( A
1 x' u% r, n( R& B# D hIMC = ImmGetContext(hWnd); //取得输入上下文: R" }" ?% T" h# c1 Y8 O
* b' v' k3 ]- Y, C$ d: a if (!hIMC)
7 t( a( g3 o" E2 Z) M7 g return;
* w0 Y5 _* Z+ V* U& G& h/ |7 V) W5 f# i3 L; g- j: K3 {
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
9 e6 s$ w1 ^1 [ dwLen+=1;
" a: [) y) C; v% \; D
5 P0 m+ B6 ^; d8 X3 M0 W' B if(dwLen)' @0 b) ], a/ k8 h9 B
{
b8 S) k. Z) }5 V2 q, i$ O lpResultStr = new char[ dwLen ];
+ X: f) R5 l# X1 V' t1 K4 U0 _, @, Q, |3 s2 o1 ~/ Y# {
//// 缓冲区已经满了1 t( A" f' M0 V/ \ V
if( strlen( m_lpszImeInput ) + dwLen > _CIM_MAXINPUTCHARNUMBER - 2 )
5 q6 E/ u6 q. Y* \ {# K$ I7 U& l7 S B6 x5 b- n
MessageBeep( 0 );
8 m& |0 d4 A ]! X2 S9 U" D& f return;) r( D% q3 }+ S. U
}- h/ |# S" D$ [2 |
ZeroMemory( lpResultStr ,dwLen );
* }4 N- M! Q$ X, _ if (lpResultStr)
& \. J+ ^# }. [1 K- z' I. X4 d {" `5 b% W, f. e
ImmGetCompositionString(hIMC,GCS_RESULTSTR, lpResultStr,dwLen);
|* n6 h _' g% _, q( L; Z" Z strcat( m_lpszImeInput,lpResultStr );
0 i9 H# w8 J, l }
. w ]( z9 i9 f- Y2 W: g0 u0 q delete lpResultStr;
! h( W3 R5 O: s }
( X# S8 w9 J7 M# U$ s$ C* O9 s7 H8 }+ O
ImmReleaseContext(hWnd,hIMC); //释放输入上下文- l$ |% s" ?. i
}
; ], A4 @# f1 _8 n1 O# ?) K& D: w5 ]/ K& T
}
/ L6 Z2 d6 J) K" r5 g2 I' Y
: d; o4 l( ?2 Cvoid CIM::OnImeNotify(HWND hWnd, WPARAM wParam)5 Y* d5 k2 j; {, \. y1 g/ Y
{ q) L0 y9 h* y- Z, x. Q
DWORD dwCommand = (DWORD) wParam;( D8 l/ h U# ~, s
switch( dwCommand )
9 T0 D! S/ \* n9 Z$ e7 M1 u- o {9 Q3 ]3 F$ j/ s' C! _8 o
case IMN_CHANGECANDIDATE:/ a, ~5 M! R$ @3 [9 B5 ?0 r
GetCandidateList( hWnd );
& m; l8 v) l! o) L2 _0 g+ d break;
" X6 d; V3 {. a& L h) u$ T' U: t$ ~' ]* A* `; G J
case IMN_CLOSECANDIDATE:) P& R) a7 {9 w1 e" a" L! _
ClearCandidateList();% M1 x9 W9 C$ U3 s2 j+ x8 r$ @2 m
break;. p" J% {3 Q! W2 L5 D) m+ @
! X. M1 c, |* H case IMN_OPENCANDIDATE:# f% e! n$ s" L, N1 R4 J
GetCandidateList( hWnd );
; g5 `8 W9 ?% O, ? break;2 m2 N7 W G% S! [, r) Z% E
}; t% h' G7 x/ r
}! p" b5 A% o, G# m5 ]' Z4 p
% n: A, }. x0 U6 o/ I2 Kvoid CIM::OnChar( TCHAR ch ). f/ ]. Y! I& W# x- C
{
/ t5 ^ H$ A4 m int len = strlen( m_lpszImeInput );
K; p% W! f1 b# Q {8 S
1 u: d5 a' i) `+ F8 S4 a if( ImeIsOpen() ) //输入法打开状态
; A, A# h# N2 J; o) J* V) p {
. J, s! G( F' x& i% F+ ~
0 Y# C8 \. e: H1 r- u& M/ } }3 @# o9 }/ q5 G
else //输入法关闭状态9 u7 h+ A2 C) E ] E% }( o/ _! n
{# U3 b, z" |4 M$ t
if( ch >= 32 && ch < 128 && len < _CIM_MAXINPUTCHARNUMBER - 1 ) //输入的是英文字母
9 s5 F2 Y7 ?7 x( K# k7 V, j {/ `, B: X0 C* o+ R, U0 ~
*( m_lpszImeInput + len ) = ch;* E' o' H! O5 y; {
*( m_lpszImeInput + len + 1) = '\0';+ p2 E; a% M+ W0 q6 Z6 g& ^
}$ o: C; l0 k0 T" x$ @# Y
}! M: b8 y5 @) c6 E4 R
% s' l" z3 V6 f, y
if( ch == 8 ) //BackSpace字符- g8 O4 ?. \ C) ]% m$ |
{
- {" v6 X+ U' D if( len == 0 ) //字符串长度为零
' `4 v" G5 A& g$ U return;
3 }' Q: U% m9 w8 I& s1 ]
% W* c9 A8 s8 Y! O3 z if( len == 1 ) //只有一个字符
0 G, D( H( n# J8 G* R {4 S q! I, o# j) l: t$ y3 D
*m_lpszImeInput = '\0';5 i2 @$ x+ X6 h& e/ ^
return;; g. K; V- R( k9 r+ Q Y
}
5 }) f* i- f$ {9 U, ~% M
* I( R# [5 I; _ v- o3 x0 ^4 } BYTE cc1,cc2;
( \! `0 k) ?# ?1 Q) h4 e cc1 = *(m_lpszImeInput + len -1); //分离字节* k8 `4 T/ d+ M9 s% l
cc2 = *(m_lpszImeInput + len -2);) G' C5 w( h- G1 X% S. r
6 i; `& S& I0 y6 d+ H. _" q; g if( cc1 > 0xA0 && cc2 > 0xA0 ) //中文双字节的每个字节都>0xA0
, F- M8 s, z; T" K *( m_lpszImeInput + len -2 ) = '\0';7 x6 |; Q I0 m, v9 e
else //是英文字符(单字节)( }/ Q1 V' B1 _6 D: O/ W; i; l
*( m_lpszImeInput + len -1 ) = '\0';* s# g& z k# M6 E" k5 Y6 m
}2 `8 V! T- u) M( B4 B7 o- C
}
1 B" S$ T8 m# G* A( F( L( C+ Y8 u9 P1 h* i
BOOL CIM::GetCandidateList(HWND hWnd)/ H- T6 d1 S" U
{
% G' h7 U7 H h8 U DWORD dwSize; 9 F# H# z9 n8 ^) i) f4 d! v
HIMC hIMC;# P7 R- ]8 ^' R# W- c
5 c1 |8 P. F% U' Z- H5 X7 S' B ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
/ i4 R3 h& y2 E4 f: N* ~% u- ?6 i' E5 \" R
if( m_lpCandList )
& U8 C3 I& L0 C+ K5 K& d/ u. g1 E( Q {5 a0 U3 r& c' Q7 b
delete m_lpCandList;
$ Y1 j+ y8 a1 N4 ^% L m_lpCandList = NULL;! k6 A [; X- P/ x- S
}1 E2 G: M+ l2 c8 S' p6 @! W
9 F+ l0 A- I. c7 t8 b3 c if( GetKeyboardLayout(0)==0 )
, E c* i1 P' O8 f {
& A9 u4 u0 ]9 [ return FALSE;
2 v9 T. q! l& p9 i3 u4 p }
( E) e, D( M: s% ~; ~- E: a, c/ v7 x7 C' J j
hIMC = ImmGetContext(hWnd); //取得输入上下文- [# {4 U7 N2 g6 u( |3 p4 T- c& W' }
if(hIMC == NULL)3 p- m. Y5 Q( j6 |
{9 l r. m9 g+ Q
return FALSE;! W$ e+ A, R" o& Q7 W
}
P5 t4 F4 a" L' C4 i$ T" ]+ i2 q& b7 ]/ }% D) k
ZeroMemory( m_cCandidateList,sizeof(m_cCandidateList) );
) D0 o# M* A+ ` if(dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) 6 e) f/ J( F4 o7 D/ Q
{
2 R9 q( V" ?, u+ x m_lpCandList = (LPCANDIDATELIST)new char[dwSize];
$ |( I2 {# L7 | if(m_lpCandList)
) |1 c9 i. D' P+ m {
) c2 {( h. F J7 v ImmGetCandidateList(hIMC,0x0,m_lpCandList,dwSize);
2 M/ R( P* K) e$ S CandidateToString(m_lpCandList);& B$ O5 y, D- @6 i1 ^! z
}9 s' l" D6 v. n# ]6 c6 l$ d* E8 _" Y, A
} 4 j4 p8 a" M! A
' ~+ w; c+ d0 X+ b+ e" Q1 g) d ImmReleaseContext(hWnd,hIMC);5 N7 [% M8 c0 v0 k$ B. _
+ y( U" u3 m! y% H. b return TRUE;
( @, z; F% R' a. o8 p" \1 D/ X$ Q}/ f/ v# A* p5 \5 a9 ]; m
' u6 Z3 ~( H; h$ T& p' i
void CIM::ClearCandidateList()8 U) b0 T6 B. z
{
. D4 F& r9 f( c1 n if(m_lpCandList)
" ]1 R7 g. w- Q3 K1 ~5 ? {) E" C! q, C. d# U; Z
delete m_lpCandList;
& p# }( A+ {5 ^" L- R& d7 w m_lpCandList = NULL;0 f3 w4 E; u2 X# N& T' D
}
# A+ U7 h2 O8 a P; V# K$ x ZeroMemory( m_cCandidateList,sizeof( m_cCandidateList ) );
' X6 b, X" M) P9 x3 _- g8 m}
/ h7 `: D) E0 q% @! M8 ~$ U! z# O2 y' g8 o! ^5 I3 V# N. K
0 L0 w( c# u( }& z
LPSTR CIM::GetCurInputLanguageDesc()
- q I) \. C* P: a0 W2 r{
; o8 n) q: y5 n7 g7 b HKL hKL = GetKeyboardLayout(0);
& b- F& e) P6 s+ d# `' Q2 q5 M. i# [) F* l4 ^
if( m_lpszCurInputLanguageDesc != NULL )6 G) o1 m1 G; w; | i
CHKB( delete m_lpszCurInputLanguageDesc ); //删除先 ^o^* s4 }( M5 V. E. i3 d1 n. @. v
/ `3 {! Y/ N# H+ R: h* y. K int lengh = ImmGetDescription(hKL,NULL,0); //取得描述的长度/ M. r) ?* D" `# R# e
' B8 S5 H1 x# u
CHK( m_lpszCurInputLanguageDesc = new char[ lengh ] );6 O2 z$ x) [' v4 b& v
" r& Q% t6 c& ?# @( `: q' _ if( lengh )( G- L s: @# }# D% n
{$ P% b! `0 Z! m+ _
ImmGetDescription(hKL,m_lpszCurInputLanguageDesc,lengh);9 M. H5 g4 w" b" c# Y8 N2 j# r5 K
} g( }# `% R2 m9 k
else) |; J1 J) Q* ?" z" M
{
; f4 D: B- t2 a3 z4 W9 h! \3 O5 ?, T2 ? strcpy( m_lpszCurInputLanguageDesc,"输入法关闭" );0 c4 J, t7 q$ X, n( A# Y3 W
}) K+ P& w2 g- v/ |7 e" |- V
9 v8 P: r3 S5 x9 a5 l7 }
return m_lpszCurInputLanguageDesc;
8 x9 y1 ^- a/ n% N# ]}
4 z. F0 e# z3 r" v* Q% a
1 L+ c6 Q' U! _: {( fvoid CIM::UpdateShow()9 ~4 v _& A5 I& N! F4 h a' i
{
% J( C! @& [( Y6 K$ L D POINT pt;9 f, l. o# _3 F: E
pt.y = 450;
' W* x0 P1 H9 A$ E/ Y+ P pt.x = 400;
+ X4 ]( h. v. g! Y: f% \" f ttffont.SetSurface( DD_GetBackScreen() );
$ x. t p- i+ p6 e ttffont.ShowText( m_lpszCurInputLanguageDesc,&pt,RGB( 255,255,0 )); //显示输入法描述+ N9 R0 u5 O7 B3 o- {
. |4 M; ]- p: n- e" z- V8 t pt.y = 420;
, ?* i8 V5 v8 F pt.x = 20;
# F; c2 J+ ~3 a" m ttffont.ShowText( m_cCandidateList,&pt ); O* w6 U/ I% `. r- D4 @. ]
3 e" i' \! C# q! L4 \: T; V! G# L
pt.y = 450;
; S G- K) d' M. W ^" l pt.x = 20;
. c7 A4 I" x2 _, q- R if( *m_lpszImeInput == '\0' )5 E8 p8 Y. w3 K9 I# L+ q7 S
return;# z; b N3 g% s5 `& ~ i* a
: Z% C! w+ R! [ ttffont.ShowText( m_lpszImeInput,&pt,RGB( 255,255,0 )); //输入的文字
$ \9 L, ~, v* L* W& H) i- M2 R+ O}* n1 I- y' ?8 _, Y r
" k. H, f8 ?; F a" Z6 j
LPSTR CIM::GetResultString()6 y6 x1 f& I9 c8 y( M
{
1 G. ]: F4 S: I a0 k2 q/ y return m_lpszImeInput;7 \' w9 o e% a5 A% b- G
}) s) p( u' J' _+ K
0 A( ?: ^- @2 ?( OBOOL CIM::CandidateToString(LPCANDIDATELIST lpCandidateList)) M6 v+ j; f6 f+ A. z" u/ e# d" N
{8 m# \# J3 E U% x7 O/ F8 x' r
if( !m_lpCandList )+ e! i* X. W2 w/ A f% [# l
return FALSE;
. Z5 M3 l6 @% N. d* i3 ^/ G9 H, G' T) Z! j5 z! p8 \
if( m_lpCandList->dwCount>0 )6 t0 W9 d0 O! \7 E! M& `4 b D
{
( J5 y- v- q4 c) g9 T/ v& } LPDWORD lpdwOffset;
) b2 N* s$ Z/ A# C( }- u( D: n. l3 z
+ n6 F. B& S( ` lpdwOffset = &m_lpCandList->dwOffset[0];7 x5 X: ~0 |3 U" D' H3 J
/ c( l+ E/ c+ d& L( N& H5 f" ^
lpdwOffset += m_lpCandList->dwPageStart;4 {( U C% y. `5 y
2 t) A! f" a4 L& h A ZeroMemory( m_lpCandList,sizeof( m_lpCandList ) );4 ?8 E. L/ F1 F) H" ~ t' M; z
6 c! I; j8 c! r& R, t
DWORD z=1;7 U. r V d( K- H& B
for (DWORD i = m_lpCandList->dwPageStart; (i < lpCandidateList->dwCount) && (i < m_lpCandList->dwPageStart + m_lpCandList->dwPageSize); i++)
5 G R2 I5 t9 k b' X { 2 O4 s3 t4 s' q2 |
LPSTR lpstr = (LPSTR)m_lpCandList + *lpdwOffset++;! B) ^8 b7 k; b; ~. a% G4 k
char buf[255];
3 D/ m. g6 m; s. M1 z sprintf( buf,"%d.%s",z,lpstr );
% }, t: O# q* H. e- ^ v strcat( m_cCandidateList,buf );
5 b# _. _0 `7 N. P8 B2 M/ j" p0 ~ z++;: i7 E+ s" ?0 f9 h. t' j" {( u
}3 |/ o1 z& k5 N9 _+ T/ t
F( T* G$ j$ A5 |5 `7 j; Q
return TRUE;
& S! r5 k. d1 L0 S/ v+ v, c }
5 d7 V8 s- T$ D; o7 I2 f7 _9 w
: | N5 E5 ~5 J6 }5 L4 A/ H return FALSE;
# }/ ^) R$ @/ a- K} t0 s: J+ G, k$ q
) v$ W5 ]$ R, X/ C# N
BOOL CIM::ImeIsOpen()
0 f/ U, x a2 u h{
# v, a$ R4 r- r3 O3 h! L return ImmIsIME( GetKeyboardLayout(0) );* L ~: s5 ` ~8 d
} |
|