第6章文档与视图讲述.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章文档与视图讲述

* * * 1.为线段定义新类CLine。选择“Insert|New Class”菜单命令,弹出New Class对话框中,在Class type栏选择Generic Class,在类名Name栏输入CLine,在类名Base class[es]栏输入CObject,单击OK按钮,自动生成了类CLine的头文件Line.h和实现文件Line.cpp的框架。 例 完善绘图程序MyDraw,在重绘窗口时能够显示已绘制的线段。 2.为类CLine定义成员变量和成员函数。 class Cline : CObject { private: // 定义成员变量,表示一条直线起点和终点的坐标 CPoint m_pt1; CPoint m_pt2; public: CLine(); virtual ~CLine(); CLine(CPoint pt1, CPoint pt2); // 构造函数 void DrawLine(CDC *pDC); // 绘制线段 }; CLine::CLine(CPoint pt1, CPoint pt2) { m_pt1=pt1; m_pt2=pt2; } void CLine::DrawLine(CDC* pDC) { pDC-MoveTo(m_pt1); pDC-LineTo(m_pt2); } 在Line.cpp中编写成员函数的实现代码: 3.一般都使用数组来保存多条线段的数据,而且MFC提供了实现动态数组的类模板。类CObArray支持CObject指针数组,用它定义的对象可以动态生成。这样,可将存放每条线段数据的变量的指针存到CObArray类的对象中。为此在文档类CMyDrawDoc中定义有关的成员变量和成员函数,需要包含CLine类定义的头文件。 存储线段采用什么数据结构? #include Line.h #include afxtempl.h // 使用MFC类模板 class CMyDrawDoc : public CDocument { . . . . . . protected: CTypedPtrArrayCObArray,CLine* m_LineArray; // 存放线段对象指针的动态数组 public: CLine* GetLine(int nIndex); // 获取指定序号线段对象的指针 void AddLine(CPoint pt1, CPoint pt2); // 向动态数组中添加新的线段对象的指针 int GetNumLines(); // 获取线段的数量 . . . . . . }; 成员变量m_LineArray是类模板CTypedPtrArray的对象。使用数组类模板CTypedPtrArray需要指定两个模板参数: CTypedPtrArray BASE_CLASS, TYPE 参数BASE_CLASS指定基类,可以是CObArray或CPtrArray;参数TYPE指定存储在基类数组中元素的类型。本例中,这两个参数分别为CObArray和CLine*,表示m_LineArray是CObArray的派生类对象,用来存放CLine对象的指针。 为了使用MFC类模板,须包含头文件afxtempl.h。 使用MFC数组类模板CTypedPtrArray 其他主要成员函数: void CMyDrawDoc::AddLine(CPoint pt1, CPoint pt2) { CLine* pLine=new CLine(pt1, pt2); // 新建一条线段对象 m_LineArray.Add(pLine); // 将该线段加到动态数组 } CLine* CMyDrawDoc::GetLine(int nIndex) { if(nIndex0||nIndexm_LineArray.GetUpperBound()) // 判断是否越界 return NULL; return m_LineArray.GetAt(nIndex); // 返回给定序号线段对象的指针 } int CMyDrawDoc::GetNumLines() { return m_LineArray.GetSize(); // 返回线段的数量 } 4.鼠标移动时,除了绘制线段,还要保存当前线段的起点和终点坐标。需要在视图类CMyDrawView的鼠标移动消

文档评论(0)

441113422 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档