|
// TypeSet.cpp: implementation of the CTypeset class. //. B- n. y {1 k# W* {3 y6 T //////////////////////////////////////////////////////////////////////0 {$ b. V3 O4 { x- ]1 x #include "stdafx.h" #include "..\INC\TypeSet.h" //用法示例 void TestTypeset(HDC dc)/ F8 n$ ^8 h. J) i6 F3 W5 N- L { //声明一个板材对象 CTypeset typeset; //设置板材对象大小0 q, h/ v b; j$ d5 T. V' Z typeset.m_Desktop.m_dHeight=9999; typeset.m_Desktop.m_dWidth=100;7 v, m5 q$ W* L //声明一个排样元素对象 CMaterial material;0 b7 ~$ X% r: v& Y //设置排样元素对象大小% t+ {7 { v" b+ J2 ^ material.SetSize(20,99); //添加进入板材对象 typeset.Add(&material);$ u+ x, w1 \+ C- s& d //继续添加 material.SetSize(99,80); typeset.Add(&material);! B6 I5 R1 e) w4 ^ material.SetSize(10,60); typeset.Add(&material);+ q% t4 j/ |/ g5 S: A. e& R" |0 M: [ material.SetSize(50,20); typeset.Add(&material); //添加完毕,进行排样+ ^' c" \$ T6 ^$ z4 q typeset.Go();+ r3 A" E! }6 p4 s9 R8 ]5 \ v1 c //排样完毕,输出 m( T9 D. z( |6 D7 v1 _& L" k list<CMaterial*>::iterator iter;$ d; S) w( o1 ]2 b //画板材对象, s. {, I4 T1 j0 y5 [ ::Rectangle(dc,typeset.m_Desktop.m_dX,typeset.m_Desktop.m_dY,7 b. p" N+ s+ p typeset.m_Desktop.m_dX+typeset.m_Desktop.m_dWidth,3 C& n1 H3 X5 a. }) I typeset.m_Desktop.m_dY+typeset.m_Desktop.m_dHeight);' p% v' N3 e$ Q/ P% a //画排样元素对象 for(iter=typeset.m_MaterialList.begin();iter!=typeset.m_MaterialList.end();iter++) { ::Rectangle(dc,(*iter)->m_dX,(*iter)->m_dY,; ^7 ?2 _2 P7 C% h7 B( g (*iter)->m_dX+(*iter)->m_dWidth, (*iter)->m_dY+(*iter)->m_dHeight); }* ]; p# u2 P# H% j1 `8 c3 c } ////////////////////////////////////////////////////////////////////// // CMaterial Class ////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////2 k, A c7 d2 a9 c" O$ } // Construction/Destruction6 `$ m& {8 D. S' I' R |; Q //////////////////////////////////////////////////////////////////////2 L H: ~- q% V #define ZERO 0.000011 k3 ~( V- k2 G9 c# _/ c0 L CMaterial::CMaterial()/ a1 n' {5 n/ A2 k5 J) @5 G {; v1 W+ L" b" Q m_dHeight=100; m_dWidth=100; m_dX=0; m_dY=0;' U, F1 L7 t2 v6 `5 S2 n, ?& | m_bUsed=FALSE;' N( U' w& R/ e Z m_bSeletcted=FALSE;8 n2 Z9 t1 n- y( G; d1 d# U m_bRotated=FALSE;" f/ q6 S& h+ u m( j m_iIndex=0;) ~( n) m: c, N) p' r Q. m }! ?0 | ~! @2 }3 H: m CMaterial::CMaterial(double dWidth,double dHeight) {: u" Q& s+ p# C7 i& H* l7 K SetSize(dWidth,dHeight);% G* e o9 ]) Y7 i/ [) U$ Q m_dX=0;4 \* S( G5 u8 a. g" t! Y m_dY=0; m_bUsed=FALSE; m_bSeletcted=FALSE; m_bRotated=FALSE; m_iIndex=0; } CMaterial::CMaterial(CMaterial *pMaterial) G1 K/ O& F, q8 m/ O8 W { m_dX=pMaterial->m_dX; ?& a' ?* X3 \+ \9 m' y; O m_dY=pMaterial->m_dY; m_dHeight=pMaterial->m_dHeight; m_dWidth=pMaterial->m_dWidth; m_bUsed=pMaterial->m_bUsed;* n( Q+ x2 b% D+ T m_bSeletcted=pMaterial->m_bSeletcted; m_bRotated=pMaterial->m_bRotated; m_iIndex=pMaterial->m_iIndex;( } n! `" n+ j0 v E. ~$ ?6 c1 T. z }8 T( X$ f: Q2 a void CMaterial::SetSize(double dWidth, double dHeight)3 S5 _* n+ {" W8 |- n' B { m_dHeight=dHeight; m_dWidth=dWidth;9 k; b: c x& q; @8 n 0 V8 C$ r9 s0 g0 @: r }4 F( }$ n8 R2 |. p5 y" j void CMaterial::Rotated()/ k4 X4 K3 w- r: s ~ {) F; }. @: Q2 K. f, w" l m_bRotated=!m_bRotated; double dA=m_dHeight;1 `9 |2 j3 q* B4 x/ O+ ]/ @" ` m_dHeight=m_dWidth;, P! T+ Q0 q- n& t4 a m_dWidth=dA;9 i, T) V1 `9 ? f, J& @* A' z" L }: i; s' }% V* o+ ? CMaterial::~CMaterial() {& A+ E, J+ m# A" w }( J$ h7 S3 ?7 d$ z- a; Q2 P //////////////////////////////////////////////////////////////////////% W4 x: H& w: [ // Construction/Destruction //////////////////////////////////////////////////////////////////////$ s8 I0 f, ]" A CTypeset::CTypeset(); g$ s, m+ v" ]5 h6 Z { Clear(); } CTypeset::~CTypeset()% Y7 b' \& p: n g" e8 I+ @ { Clear(); }: i* P- k" u0 l3 F1 B7 L) f void CTypeset::Clear()- A( g$ E7 x+ b K$ g {& ]4 A8 r% B) @3 W3 r8 e5 F# u list<CMaterial*>::iterator iter; for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++)+ t/ P5 e0 y6 @& K# \. g5 I9 U { delete (*iter);2 @! y! j5 K4 N+ i- h } m_MaterialList.clear(); m_iCurIndex=0;+ g+ N+ J; D/ @9 p" Y }7 ~% O9 H$ K) q2 m1 y void CTypeset::Add(CMaterial *pMaterial) { CMaterial *p=new CMaterial(pMaterial); |
精华推荐
换一换


p->m_iIndex=m_iCurIndex;
m_MaterialList.insert(m_MaterialList.end(),p);$ k% i7 p; V% @& B
m_iCurIndex++;# N/ M6 E# ]6 F8 d
}. V; N& L! V8 S; b9 C
void CTypeset::Sort()
{
list<CMaterial*> MaterialList;
list<CMaterial*>::iterator iter1,iter2,iter3;
bool bSourceInvert=false;
while (!m_MaterialList.empty())
{
double dMaxLen=0;
iter2=m_MaterialList.begin();
CMaterial *p=NULL;+ }" w. w& }1 {% L. t A
iter1=m_MaterialList.end()--;0 N! H( Z2 [7 f7 c- U
iter3=iter2;5 k8 r% ?9 ~. {) c2 Y* w
while(iter2!=iter1)
{
if((*iter2)->m_dWidth>dMaxLen)4 _; ]& n+ t1 O( L; ]1 g
{
p=*iter2;! b- v% Y4 S6 H: L6 ~- g) p
iter3=iter2;3 Y, q$ @ I6 }
dMaxLen=(*iter2)->m_dWidth;, C2 f" ^: q5 C- x" a
bSourceInvert=false;
}
if((*iter2)->m_dHeight>dMaxLen)
{; }1 G0 A' _' x( i+ I
p=*iter2;
iter3=iter2; I# D0 N) R! {& n# o
dMaxLen=(*iter2)->m_dHeight;
bSourceInvert=true;1 U2 D+ T# e& `$ r2 q
}
iter2++;# U* }4 V* w; T" i
}
if(p!=NULL)
{
if(bSourceInvert)
p->Rotated();
MaterialList.insert(MaterialList.end(),p);- ]% B1 i" g" N% [
m_MaterialList.erase(iter3);
}
}% z5 \) \) B, `1 s! O
m_MaterialList.clear();
for(iter1=MaterialList.begin();iter1!=MaterialList.end();iter1++)
{5 f* ~/ L$ w8 D8 ?$ |! E
m_MaterialList.insert(m_MaterialList.end(),(*iter1));
}
MaterialList.clear();
}
double CTypeset::Go()1 e8 D" n7 `7 L, X0 e3 N
{3 u9 \* m3 ^1 m4 f: ] [
double dRet=0;& N* R) m* ~" O6 C$ Z% P
list<CMaterial*> List;# e* F' @4 \, O/ `4 j6 r
list<CMaterial*>::iterator iter;
Sort();
Typeset(m_Desktop.m_dX,m_Desktop.m_dY,( |6 Q* B* Y) E& [ D$ Z: A
m_Desktop.m_dWidth,m_Desktop.m_dHeight,&List);/ l- _6 Y2 B( a
m_MaterialList.clear();
for(iter=List.begin();iter!=List.end();iter++)
{
if((*iter)->m_dX<ZERO)) }+ L4 l6 c2 G, S1 G$ u
{
dRet+=(*iter)->m_dY;
} l- a; ^. W" }; s
(*iter)->m_bUsed=FALSE;
(*iter)->m_bSeletcted=FALSE;. t9 {; N! \8 T: }! v
m_MaterialList.insert(m_MaterialList.end(),(*iter));( `( \* ^0 |/ z5 h3 K' b
}# n }" y2 x3 x) Q: _5 }9 ~' B% q
List.clear();
return dRet;& L/ p4 U/ M/ ^; C
}
double CTypeset::Typeset(double dStartX,double dStartY,double dStartHei,double dStartWid,7 b, s K3 o7 a" K% c
list<CMaterial*> *pList)
{
CMaterial *tmpunit=NULL;! l# ~4 v% i C, u: }# A7 U J
list<CMaterial*>::iterator iter,iter1;- Y: x( T; R+ j( f: t" ]9 S) a1 T
double dArea1,dArea2,dArea;//横放和竖放时的排样面积,和最后方案的排样面积 X3 d( s: H* C& g0 Q
double dRestArea1,dRestArea2;//横放和竖放时排样后的剩余面积
list<CMaterial*> List1,List2;////横放和竖放时的最佳排样序列7 I& O# i7 k( A9 B! V
double dHeight,dWidth;0 s. `: J" p& i1 S. y7 c
2 {: V0 X6 w% { O1 k& ~
dHeight=dStartHei;
dWidth=dStartWid;/ i9 M1 w+ m* m2 T
' U4 B* |1 m0 Z( |8 d$ D) p, n9 N
if(m_MaterialList.empty())
return 0;7 J* m* P. C8 E0 f: j
for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++)
{
if((*iter)->m_bUsed!=FALSE)) w* P- I/ L5 _2 ~
continue;/ G3 R- j+ k. e
if((*iter)->m_dWidth<(*iter)->m_dHeight)
{
MessageBox(NULL,"错误","ERROR",MB_OK);
return 0;: H( Z; L% k- N$ h6 D0 y
}' |# l* u4 R! w: ^# I6 I
//找出一张能放入的最大的没有排过的板材
//如果板材横竖都能放入& a3 k2 p7 }- Y; F7 c2 z
if(((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))5 }4 \$ B' H0 [) g) G, D9 O
&&((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO)))* o4 e( A* ?$ k6 w
{ 0 U0 X3 O% E4 N( f7 m- @) h4 F
if(dStartX<ZERO)8 ^+ g3 F: q# i; i
dWidth=(*iter)->m_dHeight;4 {2 i/ }& P, f& f* T; U' n
: f) K* c" l( E' S) e- C# x" e
(*iter)->SetUsed(TRUE);//对该图排样) z- v5 j0 Q3 O5 ]* ?; E2 m0 M: x7 Z" J
" J8 O o/ [2 [! I
//先横着放入继续排样,计算剩余面积1 h W; O0 q* N# P6 n7 z9 S
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);4 ?& F8 `8 |4 Y* M+ R. B; ~
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();- V" B+ ^+ a! D1 u1 U6 a& [
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率6 B( U. v$ p) t# L5 N- R
5 E: F5 B) l/ ?. X* w
//将刚才排过的板材状态还原,再竖直放入该图继续排样,计算剩余面积
if(dStartX<ZERO)
dWidth=(*iter)->m_dWidth;4 ]/ p- p. H5 ?4 n$ J% v9 l7 o; K. Z
SetStatus(&List1,FALSE);" y* y+ `4 \( J, u+ ?: s
tmpunit=(*iter)->Copy();
tmpunit->Rotated();
dArea2=Typeset(dStartX+tmpunit->m_dWidth,dStartY,* G" A1 Z( z" N2 V' d
dHeight-tmpunit->m_dWidth,tmpunit->m_dHeight,&List2);
dRestArea2=dHeight*dWidth-dArea2-tmpunit->GetArea();
dRestArea2=dRestArea2/(dHeight*dWidth);//剩余面积率3 F: x& G. L4 k# m
}
else if((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))//如果板材只能横着放入! X! Z" Q5 q: x+ P' q& x
{
if(dStartX<ZERO)# Y2 R8 b* J) m5 L! D
dWidth=(*iter)->m_dHeight;4 `3 ~3 w' {9 m5 R+ c
" m' A& U l' \5 ~
(*iter)->SetUsed(TRUE);//对该图排样4 \9 {2 m0 J* w$ ^* x
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();0 D5 Q* C( K+ o$ M1 C: X( U
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率5 ^8 t+ c& D# N7 V! q( r. ~
( W8 |4 ]3 g! t+ w1 T: U6 G% O
dRestArea2=dRestArea1+10;//不再尝试竖放,将竖放剩余面积设大
}$ U. h% C; f) N. ]
else if((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO))//如果板材只能竖着放入
{
if(dStartX<ZERO)) u+ ~5 T! y# r$ Z0 K/ V, a( }& w
dWidth=(*iter)->m_dWidth;# C( }2 M0 O! c6 r; x
(*iter)->SetUsed(TRUE);//对该图排样
tmpunit=(*iter)->Copy();
tmpunit->Rotated();0 m; o7 w9 D6 g Q. J5 E
dArea2=Typeset(dStartX+tmpunit->m_dWidth,dStartY,
dHeight-tmpunit->m_dWidth,tmpunit->m_dHeight,&List2);1 m7 i3 }( X1 w7 y2 G
dRestArea2=dHeight*dWidth-dArea2-tmpunit->GetArea();
dRestArea2=dRestArea2/(dHeight*dWidth);//剩余面积率
; D3 b9 h7 W! V4 r6 n2 S
dRestArea1=dRestArea2+10;//不再尝试横放,将横放剩余面积设大3 ]7 Y% N, E% ^, L
}% e0 R8 T7 y$ r9 a' g* A
else
continue;4 N" j- `4 z0 o3 _! k
) Z( K j/ s4 ~9 `
//记录优化的排样序列$ F) b2 q6 S) b# d i
CMaterial *tmp=NULL;! G& U/ M& E) w* b! b
if(dRestArea1<dRestArea2+ZERO)//当前板材横向排结果优化5 J7 v% \" M0 ]; l$ N- ~ M
{
SetStatus(&List2,FALSE);//将纵向排的排样序列还原状态
SetStatus(&List1,TRUE);//将横向排的排样序列标志为使用7 X6 B; G9 w; g$ h' C* M
dArea=dArea1+(*iter)->GetArea();;* L# R7 s# A% P) ^4 q. T2 y0 z/ N5 N
tmp=(*iter)->Copy();
tmp->m_dX=(int)dStartX;
tmp->m_dY=(int)dStartY;" {; H5 l5 \. P/ F0 z% F7 n5 B
pList->insert(pList->end(),tmp);3 R3 B4 S+ V. t' g# ?" y! V' M
while(!List1.empty())% ]3 q+ G8 @! u2 D1 ?, }
{
iter1=List1.begin();# c9 ]& l$ F2 b7 s! O( e) {
pList->insert(pList->end(),*iter1);
List1.erase(iter1);
}
//释放不好的序列$ D3 x7 L: I* d7 ]
for(iter1=List2.begin();iter1!=List2.end();iter1++)5 I( C% c% I1 j9 b# X
{% t% D) V+ O, }
delete (*iter1);
}
List2.clear();
delete tmpunit;2 I; L& r+ ^3 g& j e
}* [ G) q& x: ]: v i/ Y! p4 r
else//当前板材纵向排结果优化/ M! v0 P+ m5 m- k# L
{
SetStatus(&List1,FALSE);//将横向排的排样序列还原状态
SetStatus(&List2,TRUE);//将纵向排的排样序列标志为使用' A- L* U5 ~8 k1 o+ W' U2 {
if(tmpunit==NULL)+ {4 o4 ~+ ?( a& J
{
MessageBox(NULL,"错误","ERROR",MB_OK);
return 0;
}
dArea=dArea2+(*iter)->GetArea();
tmp=tmpunit->Copy();+ a9 r. v& |+ R5 N0 b
tmp->m_dX=(int)dStartX;
tmp->m_dY=(int)dStartY;4 |& r6 E* d* r: a0 |2 x) g) ?
pList->insert(pList->end(),tmp);" i# f8 o% J* O2 m d+ R9 O: y0 j8 E
while(!List2.empty()); s) K& A W9 b
{
iter1=List2.begin();
pList->insert(pList->end(),*iter1); v0 k: R* f* W( x
List2.erase(iter1);
}
//释放不好的序列( i7 A6 ~7 K4 E# u; U2 {# }* S
for(iter1=List1.begin();iter1!=List1.end();iter1++)
{
delete (*iter1);( r8 x4 F2 X2 X1 R$ S
}! a" ]; M" s; ?! y4 g
List1.clear();6 i9 S; _" D& T5 w
. |# i( p: {- V0 P
delete tmpunit;
}+ U! O8 {, }& w$ F
double next_x,next_y,next_len,next_wid;
next_x=dStartX;) t* j) n: }6 \
next_y=dStartY+tmp->m_dHeight;2 e! b- T$ F4 z
next_len=dHeight;8 i- }6 j, K; |6 G
next_wid=dStartWid-tmp->m_dHeight;
if(next_wid>ZERO)//板材还有剩余
{
//继续排下一行
dArea=dArea+Typeset(next_x,next_y,next_len,next_wid,&List1);# u; w/ v6 r t! r- L$ q& k
//记录排样序列
SetStatus(&List1,TRUE);
for(iter1=List1.begin();iter1!=List1.end();iter1++)
{/ g( P: `. D" p
pList->insert(pList->end(),(*iter1));
}7 k* x3 F- s+ T8 E, Q
List1.clear();
}
return dArea;
}+ m. k6 c8 w! G
return 0;
}
; S9 @( n) I; g4 C- k
, c: w/ E. ?' C9 [
void CMaterial::SetUsed(BOOL bUsed)
{9 i G9 U0 L! L7 Y
m_bUsed=bUsed;
}
$ ?- ^2 W4 m. O+ R
void CTypeset::SetStatus(list<CMaterial*> *pList, BOOL bUsed)) {) S- M) f( w# L/ Z
{
list<CMaterial*>::iterator iter1,iter2;
for(iter1=m_MaterialList.begin();iter1!=m_MaterialList.end();iter1++)9 t9 O& J: }" Z- R( }, L" ?. }
{3 Z! r. i; B/ ]$ B5 }0 I- d
for(iter2=pList->begin();iter2!=pList->end();iter2++)7 S4 d, _# y' }. [& Z
{3 F7 c: X$ K" }3 q9 } ?
if((*iter1)->m_iIndex==(*iter2)->m_iIndex)
{7 i+ h6 X" e$ z+ I/ P) i
(*iter1)->m_bUsed=bUsed;
}
}
}
}
5 M6 S/ g9 w' F/ ?6 Z2 o- N5 \
CMaterial* CMaterial::Copy()
{
CMaterial* p=new CMaterial(this);
return p;
}
a; k. }- b$ L* k
) U5 O, ^# K! D' {. x# I6 Z
" x0 y# ~8 i% l0 Y" k5 D
3 s4 E6 r+ u6 n( @6 V
// TypeSet.h: interface for the CTypeset class.7 Q3 F1 d* ^* R
//% G: N# {: M# d% t( l
//////////////////////////////////////////////////////////////////////5 I% w6 |" v0 U3 A1 `
#if !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_)
#define AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_, }2 V0 Y) d( u2 |) O
) Q# a2 C# o+ L7 S
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#pragma warning(disable:4786) J" o2 {( @7 U# j& k: O
#pragma warning(disable:4251)( B, T/ L6 E2 o! ?* B" W0 b! E; ]& e
#include <list>1 o& M! {; R5 g: ]
#include <string>% j. S! r. x# @; R/ ~% Y/ @) L
using namespace std;
#ifdef TYPESETLIB_EXPORTS
#define TYPESETLIB_API __declspec(dllexport)' }6 d3 H/ {2 I6 @/ K
#else
#define TYPESETLIB_API __declspec(dllimport)# @4 N/ J& F2 ?) V8 l
#endif" S$ j% Q( x& \& ?" |+ T
. G9 L& l6 @6 o% X' v
2 b' T# ~$ ~1 d4 a: ]
TYPESETLIB_API void TestTypeset(HDC dc);
class TYPESETLIB_API CMaterial 0 t' N+ O8 l# U. @3 b! N
{
public:
virtual CMaterial* Copy();
virtual void SetUsed(BOOL bUsed);) h) I6 j' H' v9 V
virtual void Rotated();5 V$ q k9 p4 E. ^$ s4 j
virtual void SetSize(double dWidth,double dHeight);
virtual double GetArea(){ return m_dHeight*m_dWidth; }
CMaterial();( ^. |3 u$ u! a v
CMaterial(CMaterial *pMaterial);" P( y# p+ B# R
CMaterial(double dWidth,double dHeight);
virtual ~CMaterial();' N) @1 a- b1 `+ D* J
double m_dHeight,m_dWidth;
double m_dX,m_dY;0 t5 n! u3 j4 D" _" V1 _
BOOL m_bUsed;7 x. ^# I3 \0 C# y
BOOL m_bSeletcted;* U1 r2 V. Y6 o. ]2 S' I
BOOL m_bRotated;: h7 p) G2 k, l4 l& _
int m_iIndex;3 X" N4 g* X! l$ v
6 l) ]* C N0 _8 P1 i. Y
};0 N( u$ [+ P" e( P( g+ J' F4 A
class TYPESETLIB_API CTypeset
{; J$ Q& I6 M1 o$ E8 h
public:
virtual double Go();
virtual void Add(CMaterial *pMaterial);2 b9 u2 e4 E& P2 ~
CTypeset();
virtual ~CTypeset();
list<CMaterial*> m_MaterialList;& {* h& u$ T2 g2 }0 k8 x* M
CMaterial m_Desktop;
protected:% H" A* Y" w) q! F! m
virtual void SetStatus(list<CMaterial*> *pList, BOOL bUsed);9 m, Q6 d1 V" B( K$ Y
virtual double Typeset(double dStatrX,double dStatrY,double dStatrHei,double dStatrWid,
list<CMaterial*> *pList);
virtual void Sort();
virtual void Clear();
int m_iCurIndex;1 ^2 ^1 W. h! H1 \
};
$ \0 e0 T5 L% A. @. F- `/ P- G
#endif // !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_)