MFC课程设计实验报告(3)

2019-09-02 13:38

MFC—课程设计

}

break;

case 1:

m_TuYuanTyp=EnumTuYuanTyp_Rectangle;

break;

case 2:

m_TuYuanTyp=EnumTuYuanTyp_Triangle;

break;

case 3:

m_TuYuanTyp=EnumTuYuanTyp_Circle;

break;

case 4:

m_TuYuanTyp=EnumTuYuanTyp_Ellipse; break;

case 5:

m_TuYuanTyp=EnumTuYuanTyp_Text; break;

default: }

CDialog::OnOK();

ASSERT(0);

6.定义动态数组

1)定义(LwhDoc.h) public:

CObArray m_Elements; 2)清除(LwhDoc.cpp) //清除图元地址,释放空间 CLwhDoc::~CLwhDoc()

11

MFC—课程设计

{ }

for(int i=0;i

m_Elements.RemoveAll();

delete m_Elements[i]; m_Elements[i]=NULL;

7.建立Shape类及其子类

一个类要支持支持序列化Serialize,必须从CObject派生,并且在类的声明(.h文件)中包含DECLARE_SERIAL申明,在类的实现(.cpp)中包含IMPLEMENT_SERIAL申明。所以,要建立支持序列化的Shape类,首先选择ClassView,鼠标右键单击工程名,选择New Class,在类的类型中选择Generic Class,输入类名CShape,并在下方Derived From中输入CObject,继承类型为public,点击确定,系统会生成相应的Shape.cpp文件和Shape.h文件。 在Shape.h中定义其成员变量和成员函数,注意OnDraw函数应定义为纯虚函数(参见附表1.函数定义与功能一览表)。然后由Shape类派生其六个子类CSquare,CRectangle,CTriangle,CCircle,CEllipse,CText,继承方式均为public,在子类中也定义其成员函数及变量(以CSquare为例) class CShape : public CObject { public:

CShape();

virtual ~CShape();

virtual void Draw(CDC*pDC)=0;//绘制图元

virtual bool IsMatched(CPoint pnt)=0;//点是否落在图形内部 virtual void Serialize(CArchive& ar) = 0; int OrgX;

12

MFC—课程设计

int OrgY; int width; int high; int linewidth;

int R1,R2,G1,G2,B1,B2; };

class CSquare:public CShape { public:

CSquare();

CSquare(int x,int y,int w,int line,int r1,int g1,int b1,int r2,int

b2,int g2);

void Draw(CDC*pDC);//绘制

bool IsMatched(CPoint pnt);//重载点pnt是否落在图元内 virtual void Serialize(CArchive& ar );//序列化正方形图元

private: };

在Shape.cpp中对Shape类极其子类进行序列化,并写入子类的成员函数,完成绘图和进行图元匹配功能(以CSquare为例)

IMPLEMENT_SERIAL(CSquare, CObject, 1) //实现类CSquare的序列化,指定版本为1

void CSquare::Serialize(CArchive &ar) {

if (ar.IsStoring()) {

ar << OrgX<< OrgY;//原点坐标 ar <

DECLARE_SERIAL(CSquare)//声明类CSquare支持序列化

13

MFC—课程设计

}

}

ar<< linewidth;//线宽

else { }

ar >> OrgX >>OrgY;//原点坐标 ar >>width;

ar >> linewidth;//线宽

CSquare::CSquare()//缺省构造函数,初始化 { }

CSquare::CSquare(int x, int y, int w,int line,int r1,int g1,int b1,int r2,int b2,int g2) {

OrgX = x;//原点坐标 OrgY = y;

OrgX = 400;//原点坐标 OrgY = 400;

linewidth= 1;//线宽 width = 100;

linewidth=line;

width = w; R1=r1; R2=r2; G1=g1; G2=g2; B1=b1; B2=b2;

14

MFC—课程设计

}

void CSquare::Draw(CDC*pDC)//绘制函数 {

CPen pen, *pOldPen;

pen.CreatePen(PS_SOLID, linewidth,RGB(R1,G1,B1)); pOldPen = (CPen*)pDC->SelectObject(&pen); CBrush brush, *pOldBrush;

brush.CreateHatchBrush(HS_DIAGCROSS, RGB(R2,G2,B2)); pOldBrush = (CBrush*)pDC->SelectObject(&brush);

pDC->Rectangle(OrgX - width / 2, OrgY -width / 2, OrgX + width / 2,

OrgY + width / 2); }

bool CSquare::IsMatched(CPoint pnt)//图元匹配函数 {

if ((OrgX-width/2 <= pnt.x && pnt.x <= OrgX + width/2) && (OrgY - pDC->SelectObject(pOldPen); pDC->SelectObject(pOldBrush);

width/2 <= pnt.y && pnt.y <= OrgY+width/2)) }

return true;

else

return false;

8.OnDraw()

由于Shape.cpp调用了Ondraw()函数,而OnDraw()函数的定义是在LwhView.cpp中(参见附表1.函数定义与功能一览表),故应该在LwhView.cpp中对Ondraw()进行调用声明,代码如下: void CLwhView::OnDraw(CDC* pDC) {

15


MFC课程设计实验报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高中数学实施分层教学的研究

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: