网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读

源代码在线查看: 11.2 图形的保存和重绘.txt

软件大小: 956 K
上传用户: kzdai22
关键词: TXT VC 目录
下载地址: 免注册下载 普通下载 VIP

相关代码

				11.2 图形的保存和重绘
				本章将在上一章己有程序 ( Graphic)的基础上继续添加图形的保存和重绘功能,为了
				使程序演示效果更好,首先将己有的 Graph ic程序的窗口恢复为默认的白色背景,也就是
				将 CGraphicView类的 OnEraseBkgnd函数中显示位图的代码注释起来。然后,读者可以运
				行一下 Graphic程序,并利用相应菜单命令在窗口中绘制一些图形,当窗口尺寸发生变化
				
				时,将会发现窗口中绘制的图形都消失了。这是因为当窗口尺寸发生变化时,引起窗口重绘,会发
				送 WM PAINT消息,这时首先会擦除窗口的背景,然后再进行重绘操作,这样就把窗口中先前给制的
				图形擦除掉了。如果希望所绘制的图形始终在窗口中呈现出来,就需要将这些图形保存起来,然后
				当窗口尺寸发生变化引起窗口重绘时,将这些图形再次在窗口中输出。根据前面的知识,我们知道
				当窗口重绘时总是会调用程序视类的 OnDraw函数,因此我们可以在该函数中完成图形的输出。而保
				存图形的方式有多种,对于本例所绘制的图形来说,有三个要素 :起点、终点和绘制的类型(点、线、
				矩形或椭圆),也就是说,对本例所绘制的每一个图形,只需要保存这三个要素就可以了。当窗口重
				绘时,在 CGraphicView类的 OnDraw函数中,根据每一个己保存的图形的绘制类型,利用其起点和
				终点将该图形在窗口中重新输出。由于这三个要素的数据类型不同,而在 C++中用结构体来保存不
				同类型的对象是比较合适的。在 C++中,结构体就是一个类,因此,本例也可以利用一个类来保存
				图形的这三个要素,这比较符合面向对象的思想。
				于是,我们为 Graphic程序增加一个新类: CGraph,增加方法是单击【Insert\New Class. .】菜单
				项,随后在弹出的NewClass对话框中,将新增类的类型选择为: Generic Cl臼s,如图 11.4所示。
				图 11.4新增Graph类然后为CGraph这个新类增加三个成员变量(如表 11.2所示),这里将这三个变量
				的访问权限都设置为public类型,因为在后面的程序中其他类需要访问它们。表11.2为CGraph类添
				加的成员变量
				说明
				变量类型
				变量名
				绘制类型
				uINT
				m_ndrawtype 
				CPoint m_ptOrigin 
				CPoint 
				起点 
				CPoint 
				终点
				m_ptEnd 
				为了能够方便地对这三个新增加的变量进行赋值,我们再为 CGraph类提供一个带参
				数的构造函数(其定义代码如例  11-2所示),允许用户在构造 CGraph类的对象时,直接 
				通过参数给这三个成员变量赋值。 
				例 11-2  
				
				CGraph::CGraph(UINT m_nDrawType, CPoint m_ptOrigin, CPoint m_ptEnd) 
				{
				this->m_nDrawType=m_nDrawtype; 
				this->m_ptOrigin=m_ptOrigin; 
				
				this->m_ptEnd=m_ptEnd; 
				这样,我们在程序中,通过CGraph类就可以构造相应的对象来保存图形的三个要素。因为在绘图时
				可能会绘制多个图形,所以必须为每一个图形创建一个相应的CGraph对象,以保存该图形的三个要
				素。我们可以采用数组来保存这些创建的 CGraph对象,但是这样做将会非常不方便,因为数组有一
				个缺点,一旦定义之后,就只能存储一定容量的元素。
				而用户每次绘制的图形个数是不定的,需要创建的 CGraph对象的个数也是不定的,因此应该采用一
				种动态的存储结构来保存这些 CGraph对象。本例将使用 MFC提供的-个集合类来完成这一任务。当
				然,这里可以使用链表来保存这些对象,但其实现比较复杂。 
				
							

相关资源