|
// TypeSet.cpp: implementation of the CTypeset class. // //////////////////////////////////////////////////////////////////////7 k$ u3 \6 j& b1 c( Q8 J: d% z #include "stdafx.h" #include "..\INC\TypeSet.h"4 J) J+ f& T' P* d+ k, u" F0 x6 @$ A //用法示例 void TestTypeset(HDC dc) { //声明一个板材对象 CTypeset typeset;% P* ^6 R f0 T; x9 M. } //设置板材对象大小 typeset.m_Desktop.m_dHeight=9999;5 f2 G! E* f3 r! \$ o/ m- x1 _6 @ typeset.m_Desktop.m_dWidth=100;5 o: i |. E5 h8 }& M //声明一个排样元素对象, V+ c( `2 [0 X! ]8 t% G CMaterial material; //设置排样元素对象大小 material.SetSize(20,99); //添加进入板材对象 typeset.Add(&material);% F/ G; g4 D( n$ b1 y //继续添加 material.SetSize(99,80); typeset.Add(&material);3 N- g7 v5 u1 f& ~# g j- v3 A material.SetSize(10,60);, O. ?1 Z: M; D, V2 [$ f typeset.Add(&material);2 J# _ I1 ~ k" N; i' m material.SetSize(50,20);$ P& J- J o( f- f typeset.Add(&material);+ e& l5 C: V7 |& g6 I% L8 Y( n //添加完毕,进行排样 typeset.Go(); //排样完毕,输出 list<CMaterial*>::iterator iter; //画板材对象& s# |# R0 ]9 T$ p6 P6 K* i. b ::Rectangle(dc,typeset.m_Desktop.m_dX,typeset.m_Desktop.m_dY, typeset.m_Desktop.m_dX+typeset.m_Desktop.m_dWidth, typeset.m_Desktop.m_dY+typeset.m_Desktop.m_dHeight); //画排样元素对象6 I+ k. r9 \ J8 C for(iter=typeset.m_MaterialList.begin();iter!=typeset.m_MaterialList.end();iter++) { ::Rectangle(dc,(*iter)->m_dX,(*iter)->m_dY,4 X' ^8 ^# t- ^: g (*iter)->m_dX+(*iter)->m_dWidth, R0 w' f2 a- r6 Y+ H/ C (*iter)->m_dY+(*iter)->m_dHeight);# [; c, v3 G" B$ k8 [7 Y: } } }9 z q" h; W' b3 E ////////////////////////////////////////////////////////////////////// // CMaterial Class //////////////////////////////////////////////////////////////////////5 A$ m. N3 k0 I" { //////////////////////////////////////////////////////////////////////$ T. w% t5 y% v8 e8 H7 u7 \ // Construction/Destruction {: H, ~& }0 F9 s h ////////////////////////////////////////////////////////////////////// #define ZERO 0.00001' Z D; ^8 X4 t+ L: D8 U CMaterial::CMaterial(). P) D: S$ R4 e1 l4 } {: U& D+ |; _( m+ M; ?9 o8 M m_dHeight=100; m_dWidth=100;9 b( [4 S Y' H$ v- J m_dX=0; m_dY=0; m_bUsed=FALSE;& R, Z. C/ E# m m_bSeletcted=FALSE;* k. N- Z$ C+ e4 \( x/ G$ s m_bRotated=FALSE;+ @4 V7 h' i2 T, R& k5 r1 m m_iIndex=0; } CMaterial::CMaterial(double dWidth,double dHeight)* N7 W' ~8 Z* m! z7 W { SetSize(dWidth,dHeight);+ `+ u2 P, p3 U) N# Y m_dX=0; m_dY=0;, S# T& N, ^$ O( J# k! W- g m_bUsed=FALSE;# V3 E' M; w' C1 u, P+ h% g m_bSeletcted=FALSE;1 E1 w& _/ G) _ m_bRotated=FALSE; m_iIndex=0; } CMaterial::CMaterial(CMaterial *pMaterial) {8 o$ P$ a" o- h m_dX=pMaterial->m_dX;* G8 T- r' M, B8 z3 F& Q m_dY=pMaterial->m_dY; m_dHeight=pMaterial->m_dHeight; m_dWidth=pMaterial->m_dWidth; m_bUsed=pMaterial->m_bUsed;2 O8 Q" p! J# P# y3 ^% C' [0 _$ l m_bSeletcted=pMaterial->m_bSeletcted; m_bRotated=pMaterial->m_bRotated;6 n9 }7 R- O3 y& z p) Y6 u m_iIndex=pMaterial->m_iIndex;: Y. [9 x4 w6 ~- C S- c } void CMaterial::SetSize(double dWidth, double dHeight) {5 [4 e% l, x7 D* @ O2 ]( { { m_dHeight=dHeight; m_dWidth=dWidth;- F4 y) x j' D) l; R. t* o) O& m* h4 @ } void CMaterial::Rotated()7 v) n& P# l% [" J" u { m_bRotated=!m_bRotated;6 ~( {1 U3 Z& L1 k, h7 Q G" \ double dA=m_dHeight; m_dHeight=m_dWidth; m_dWidth=dA;$ O$ e# R' x4 |! ]6 h } CMaterial::~CMaterial() { } ////////////////////////////////////////////////////////////////////// // Construction/Destruction3 o6 j G" x/ x9 f- N //////////////////////////////////////////////////////////////////////) ?, ^' c, v* s CTypeset::CTypeset()- A9 y) Q3 B8 ^( D8 k5 e+ x {+ u' `) o# h* { Clear(); }9 h+ X3 |* H g% ]6 B G5 z2 `5 { CTypeset::~CTypeset() { Clear(); }! U3 _& {! z- D5 D5 k ; v- p* T$ Z# v& B2 J5 M void CTypeset::Clear() {, V+ V8 d" x' F" x' T list<CMaterial*>::iterator iter;& j2 u% t4 K1 M6 i: ~3 |0 t' F ? for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++). |5 C4 |; c- O& H3 c @ { delete (*iter);6 ]: C: ~$ P& ~, M- A- { } m_MaterialList.clear(); m_iCurIndex=0; }* G9 c% ]4 x9 i* y1 f& f, W2 ]5 @ void CTypeset::Add(CMaterial *pMaterial)1 ?8 L; c1 i1 k {- ], c& ?! W- H& v ^1 D+ F CMaterial *p=new CMaterial(pMaterial); |
精华推荐
换一换


p->m_iIndex=m_iCurIndex;7 h5 C$ N; C& s7 K! n2 w3 {
m_MaterialList.insert(m_MaterialList.end(),p);5 }0 Z! }; H! D S+ c7 J
m_iCurIndex++;
}
void CTypeset::Sort()
{& Z$ U4 u3 ]/ w
list<CMaterial*> MaterialList;- e& }/ j9 ]3 ~+ z. _% ?2 }# `
list<CMaterial*>::iterator iter1,iter2,iter3;
bool bSourceInvert=false;( F! }; W/ G6 K0 ~. X) v6 e
while (!m_MaterialList.empty())
{
double dMaxLen=0;
iter2=m_MaterialList.begin();
CMaterial *p=NULL;* G2 `' W# ?+ I% Y' D' h3 v
iter1=m_MaterialList.end()--;
iter3=iter2; Z# |5 s5 Q, g' @1 F$ N
while(iter2!=iter1)6 W& A$ Y) B, [0 z5 j0 F
{
if((*iter2)->m_dWidth>dMaxLen)- r3 m- i% { ^9 ]2 j3 ]9 S! W
{: W+ O) C. g6 [: a' ^$ a; x
p=*iter2; N* M' A4 B# B: q! E. O
iter3=iter2;, Y( B& f0 y. O' j8 O% E. O7 F
dMaxLen=(*iter2)->m_dWidth; y$ } O- v7 S9 J' w, ~
bSourceInvert=false;, }3 _4 T% {1 ~
}$ D& B( e. g/ f, R7 X9 o! W# J
if((*iter2)->m_dHeight>dMaxLen)- s" G' }+ L) ~% s2 M
{" Y; L) J: E: y; ?8 M, C
p=*iter2;6 V+ a( A7 G. w) d
iter3=iter2;' H* ^- g, R9 ^, q1 i2 s; o
dMaxLen=(*iter2)->m_dHeight;
bSourceInvert=true;
}
iter2++;4 U& n4 ?* C# u2 s1 [
}0 h% u8 X5 w& c+ G7 \
if(p!=NULL)
{
if(bSourceInvert)
p->Rotated(); ' s8 N( F; K; n E" Z
MaterialList.insert(MaterialList.end(),p);
m_MaterialList.erase(iter3);
}
}& ]6 C, l/ r( _ m
m_MaterialList.clear();
for(iter1=MaterialList.begin();iter1!=MaterialList.end();iter1++)
{/ z7 L ?* z6 `' G- m. L
m_MaterialList.insert(m_MaterialList.end(),(*iter1));/ _& G: U- E. e$ z
}
MaterialList.clear(); I! z5 e& U1 ^! [* b
}
double CTypeset::Go(), E6 e7 v o( u" H! l
{4 U: g5 u- e% K, j
double dRet=0;0 e1 B' M" s5 X- E; j
list<CMaterial*> List;
list<CMaterial*>::iterator iter;) G" ?9 Q: C8 n
Sort();3 M* Q7 \5 k7 \( Z
Typeset(m_Desktop.m_dX,m_Desktop.m_dY," Q5 H* M$ r0 e4 G7 f2 e! y K/ f
m_Desktop.m_dWidth,m_Desktop.m_dHeight,&List);1 p$ [4 i9 D1 Z% r7 N
m_MaterialList.clear();
for(iter=List.begin();iter!=List.end();iter++)
{( X) G* @& o2 d. K- S2 \2 e- A
if((*iter)->m_dX<ZERO)1 a& M9 Q; D' {: H# l
{
dRet+=(*iter)->m_dY;
}7 ] A( ^$ Q$ d) T, \4 S
(*iter)->m_bUsed=FALSE;
(*iter)->m_bSeletcted=FALSE;
m_MaterialList.insert(m_MaterialList.end(),(*iter));- e9 a: f1 {5 j9 [3 N; m
}, X) k+ B9 K6 @6 q6 U1 r9 r
List.clear();9 \! \( j4 g6 Q! b8 A
return dRet;
}3 g! G c7 C0 b; ^6 F% v0 y
double CTypeset::Typeset(double dStartX,double dStartY,double dStartHei,double dStartWid,$ c. |. P6 ^- h+ p. ~
list<CMaterial*> *pList)% K' o9 L. K- l# C1 Y& b( @
{
CMaterial *tmpunit=NULL;* R: Q1 ~( M5 `
list<CMaterial*>::iterator iter,iter1;
double dArea1,dArea2,dArea;//横放和竖放时的排样面积,和最后方案的排样面积: d/ o5 V& c7 F) ]0 }9 F9 t w! o% L
double dRestArea1,dRestArea2;//横放和竖放时排样后的剩余面积
list<CMaterial*> List1,List2;////横放和竖放时的最佳排样序列; _. q3 H& h3 A( K. i
double dHeight,dWidth;& I; g7 y3 [# N
3 o; m& N2 e. ~+ B
" E3 J3 z$ P. t4 @6 Q6 M# i+ b
dHeight=dStartHei;9 W, E+ H2 r! G) A; `: [) ~
dWidth=dStartWid;2 m, u1 t, J! s. Z- U/ r5 K- A/ v
' m. J: p, y8 b U7 b$ k9 C
if(m_MaterialList.empty())+ [8 L6 {( k+ C
return 0;# ^$ Y3 g3 ^% t
for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++)5 f+ s" N. o( T
{
if((*iter)->m_bUsed!=FALSE)
continue;
if((*iter)->m_dWidth<(*iter)->m_dHeight)
{8 W! E" D4 D2 L) t0 v$ j* w% s2 m1 X7 Z
MessageBox(NULL,"错误","ERROR",MB_OK); Z* r4 T9 f- h, P, ], q
return 0;
}) B! y- [3 E/ u- g% \% M
$ H1 ~* p. y9 l/ b9 W5 y$ ]" [
//找出一张能放入的最大的没有排过的板材) S6 k- h: S- L# n$ l3 I
//如果板材横竖都能放入
if(((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))
&&((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO)))& z J, z% r+ K
{ * a# ~4 G; j6 \) u. j7 @
if(dStartX<ZERO)
dWidth=(*iter)->m_dHeight;
(*iter)->SetUsed(TRUE);//对该图排样' g+ i. y+ p( n" p% g5 X8 s w# k
" F: F6 t! c# F6 \/ a9 G% K
//先横着放入继续排样,计算剩余面积
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,4 G! ?9 x* M$ g# o! G7 z* h
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();3 a# ] N( W% `7 k
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率
9 O0 s7 ^; G$ ^8 Z
//将刚才排过的板材状态还原,再竖直放入该图继续排样,计算剩余面积5 C8 H( }6 e& h' F$ c/ L5 S/ y
if(dStartX<ZERO)6 w* G% p/ K) Q5 e C1 p- _
dWidth=(*iter)->m_dWidth;
SetStatus(&List1,FALSE);/ o3 S% \" m! o- a4 N3 l G
tmpunit=(*iter)->Copy();
tmpunit->Rotated();
dArea2=Typeset(dStartX+tmpunit->m_dWidth,dStartY,8 R* M6 j" M# @8 L6 G4 y" L
dHeight-tmpunit->m_dWidth,tmpunit->m_dHeight,&List2);
dRestArea2=dHeight*dWidth-dArea2-tmpunit->GetArea();
dRestArea2=dRestArea2/(dHeight*dWidth);//剩余面积率
}
else if((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))//如果板材只能横着放入' I- L+ X/ b6 E5 w& {
{5 S. D+ S5 R( ?* n! @( R/ }6 D
if(dStartX<ZERO)
dWidth=(*iter)->m_dHeight;
2 T' ]4 J I+ j5 Q8 d5 d
(*iter)->SetUsed(TRUE);//对该图排样
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);5 s$ ^* F. y4 y6 b. j0 j
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();! B2 y9 V& J2 x/ ^: [% ~4 |9 e
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率9 o4 s% y5 N, Z" a: a
dRestArea2=dRestArea1+10;//不再尝试竖放,将竖放剩余面积设大1 k( ?" |* W- i" ^% T
}" u# S/ }* K i1 p, {+ p6 i8 a
else if((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO))//如果板材只能竖着放入
{
if(dStartX<ZERO)
dWidth=(*iter)->m_dWidth;0 J5 i7 f/ [* ] H) B3 N
) I. r7 u6 o+ h* n
(*iter)->SetUsed(TRUE);//对该图排样
tmpunit=(*iter)->Copy();+ a( T! h5 X2 s0 K9 Y7 F% R
tmpunit->Rotated();' d4 D6 r8 [" H/ r# w b( I8 S
dArea2=Typeset(dStartX+tmpunit->m_dWidth,dStartY,
dHeight-tmpunit->m_dWidth,tmpunit->m_dHeight,&List2);2 {7 B* p5 g; r
dRestArea2=dHeight*dWidth-dArea2-tmpunit->GetArea();
dRestArea2=dRestArea2/(dHeight*dWidth);//剩余面积率
/ C- b* N9 Z% @* _/ p
dRestArea1=dRestArea2+10;//不再尝试横放,将横放剩余面积设大
}
else + c+ y" G* n3 b& Y% ^4 V
continue;. ]8 N. s; R+ [. j+ `/ _7 {
' `) K7 G- p8 N- \
//记录优化的排样序列
CMaterial *tmp=NULL;2 W1 v& f4 N: u+ r% P) @& _
if(dRestArea1<dRestArea2+ZERO)//当前板材横向排结果优化: ?9 m7 S1 a: ~( Y4 T* U
{
SetStatus(&List2,FALSE);//将纵向排的排样序列还原状态
SetStatus(&List1,TRUE);//将横向排的排样序列标志为使用* T5 j" a, {! O* h* m
dArea=dArea1+(*iter)->GetArea();;
tmp=(*iter)->Copy();
tmp->m_dX=(int)dStartX;
tmp->m_dY=(int)dStartY;
pList->insert(pList->end(),tmp);
while(!List1.empty()). E( `) {' G R9 Z/ N" d1 s1 v+ q }2 F) R
{
iter1=List1.begin();
pList->insert(pList->end(),*iter1);
List1.erase(iter1);6 P5 E3 O+ R( i6 h. B* [& B6 h7 W/ z0 g
}! z o; G' U# P/ l! a9 L
//释放不好的序列1 E- R$ @( R: C( \' T! b
for(iter1=List2.begin();iter1!=List2.end();iter1++)1 j3 f% p5 r% B) z& I8 A
{
delete (*iter1);
}
List2.clear();
delete tmpunit;1 D4 f( I; ~" ~/ r+ l2 h+ N
}4 J3 \8 J" D2 d7 t
else//当前板材纵向排结果优化4 E& }3 n9 O. u4 K5 o
{7 o- w! I, i' F( J( }
SetStatus(&List1,FALSE);//将横向排的排样序列还原状态
SetStatus(&List2,TRUE);//将纵向排的排样序列标志为使用6 R1 G4 V0 C' h3 u0 b& s5 ]+ a
if(tmpunit==NULL)
{+ o, P% I. p- t
MessageBox(NULL,"错误","ERROR",MB_OK);6 W4 ?+ Q. H* t( K6 l
return 0;
}
" v/ B6 o- M2 N. ?8 @
dArea=dArea2+(*iter)->GetArea();9 O( s9 Y$ s: O9 s b# d: t6 M
tmp=tmpunit->Copy();0 E7 ^8 k. w1 L
tmp->m_dX=(int)dStartX;
tmp->m_dY=(int)dStartY;& m( V1 q7 e3 w1 A. j9 |/ v, W
pList->insert(pList->end(),tmp);, A3 z# X" r4 a/ I, l1 `% ~( s
while(!List2.empty())
{( m# n8 [+ V; z7 A. d/ h: V
iter1=List2.begin();
pList->insert(pList->end(),*iter1);) Q2 C1 V: T) r& r& g
List2.erase(iter1);4 d4 |. L8 ]+ h# w; Q0 d
}
//释放不好的序列7 v- o6 m3 N# K/ v {) M
for(iter1=List1.begin();iter1!=List1.end();iter1++)' h- U+ Z" o! l( L# k9 t! K
{6 V- |0 `& \# a, ^& Q- @9 |# a1 H
delete (*iter1);
}
List1.clear();
& V y' b' [$ \" b0 |4 B5 v( G# s' L
delete tmpunit;
}: d2 t" n! w2 B! T" o
double next_x,next_y,next_len,next_wid;
next_x=dStartX;2 p! y m4 q- u" z
next_y=dStartY+tmp->m_dHeight;
next_len=dHeight;
next_wid=dStartWid-tmp->m_dHeight;
if(next_wid>ZERO)//板材还有剩余
{! W9 [- f5 b5 G- w
//继续排下一行
dArea=dArea+Typeset(next_x,next_y,next_len,next_wid,&List1);
//记录排样序列4 ~: u, `1 W4 U- n
SetStatus(&List1,TRUE);/ l' n' \' ~, ^. |1 M$ I
for(iter1=List1.begin();iter1!=List1.end();iter1++)
{9 F, o! |' j3 C* U: k
pList->insert(pList->end(),(*iter1));. a; U. F8 T- C9 Q" D+ B: D/ y
}
List1.clear();
}
return dArea;7 s% a3 R) G& i- S
}, D: m" @2 i7 D* C3 o3 u
return 0;6 P+ F8 U9 ~7 D J3 ?
}! O% ~0 r9 r8 u8 u
void CMaterial::SetUsed(BOOL bUsed) x' n9 ~ s5 p( X. h
{
m_bUsed=bUsed;( d. P8 @. _7 Z& B8 {5 x
}
M1 |& S; X$ M- R! E
void CTypeset::SetStatus(list<CMaterial*> *pList, BOOL bUsed)
{
list<CMaterial*>::iterator iter1,iter2;3 a9 W+ o3 {, j& F t
for(iter1=m_MaterialList.begin();iter1!=m_MaterialList.end();iter1++)7 X- c: k6 }3 D- |: [, |3 K
{0 v' T t# K- A8 t# j9 ^' u3 _/ b
for(iter2=pList->begin();iter2!=pList->end();iter2++)$ o/ z1 q. j. k0 l. D9 ~
{" M4 w$ W u4 n
if((*iter1)->m_iIndex==(*iter2)->m_iIndex)
{8 \. E& k" m6 W. t
(*iter1)->m_bUsed=bUsed;) M- z0 t) |7 d' h0 L- g
}
}- t8 K6 |6 b0 Q$ V( ]) Z/ p
}1 o# W) J: u, W8 W2 x4 \, f
}
CMaterial* CMaterial::Copy()
{7 u; C! a: ]$ B: z* T9 P
CMaterial* p=new CMaterial(this);0 n6 V) w: C, e
return p;
}
7 l* b9 N0 w5 {
5 k( `7 T: |7 p' P
// TypeSet.h: interface for the CTypeset class.& e7 r; E9 @2 ~ ?% Z7 ^9 C1 T
//
//////////////////////////////////////////////////////////////////////
- M$ Y: x* J. C! O0 e3 \
#if !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_)
#define AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_$ a8 o' U0 R0 V2 W' D: ?& M7 }9 W
* ~6 [8 n* h- R
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#pragma warning(disable:4786)
#pragma warning(disable:4251)& p' T* I R6 i) W9 p0 R! H
#include <list>
#include <string>& w- J0 |$ e4 J' N. ]* a* J7 j
using namespace std;
#ifdef TYPESETLIB_EXPORTS" V5 S6 z- N8 F2 J: D
#define TYPESETLIB_API __declspec(dllexport)* K9 d" l6 d3 l7 \
#else
#define TYPESETLIB_API __declspec(dllimport)
#endif
$ y1 v0 _; X2 y( o
TYPESETLIB_API void TestTypeset(HDC dc);2 t" ^2 x4 D8 ?8 K2 L# `3 l! _/ p
class TYPESETLIB_API CMaterial
{* `' O, f+ e5 c3 }; N. B3 |
public:5 Y1 \2 K! X& y! H7 T
virtual CMaterial* Copy();
virtual void SetUsed(BOOL bUsed);
virtual void Rotated();
virtual void SetSize(double dWidth,double dHeight);# m. h% C4 `$ @& l8 t" j$ l6 C1 A
virtual double GetArea(){ return m_dHeight*m_dWidth; }. R. m; D8 w: H5 f9 B
CMaterial();
CMaterial(CMaterial *pMaterial);
CMaterial(double dWidth,double dHeight);
virtual ~CMaterial();
double m_dHeight,m_dWidth;; y; |: H* v; h: Z" ]
double m_dX,m_dY;
BOOL m_bUsed;
BOOL m_bSeletcted;8 |9 l# W1 i( K; K" l; Z' |5 h) ]
BOOL m_bRotated;
int m_iIndex;: x6 b, Q5 m8 F$ R- p, `
};4 O: ]) U, h8 ?( V3 y
class TYPESETLIB_API CTypeset 1 e: {5 N/ V9 y. u" U) L5 F" ^
{
public:
virtual double Go();* r2 r( ?1 _7 l& X: n k- m X
virtual void Add(CMaterial *pMaterial);
CTypeset();5 e1 Q" P1 ~( a, t8 j; c
virtual ~CTypeset();+ [0 |1 f) k" X! d: K$ K
list<CMaterial*> m_MaterialList;
CMaterial m_Desktop;0 L9 S: x- R# G( T/ G; d
protected:
virtual void SetStatus(list<CMaterial*> *pList, BOOL bUsed);, h' v) V9 |& F4 J5 p9 m& A
virtual double Typeset(double dStatrX,double dStatrY,double dStatrHei,double dStatrWid,2 P3 L) w! S! K6 H. F1 m6 P
list<CMaterial*> *pList);
virtual void Sort();* j& u. ^5 _' P* o9 ` O( P
virtual void Clear();! R8 x& {& b1 T
int m_iCurIndex;
};
+ b6 Z: p; Z4 k$ M( R. Y8 e2 C
5 Y0 E- L4 k6 L6 Y' p9 K4 M
#endif // !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_)