做画板

来源:互联网 发布:windows vista家庭版 编辑:程序博客网 时间:2024/04/29 15:12

做画板涉及到VC的框架结构,是个很好的联系。

主要分为:1、画出图像  2、改变窗口时数据不丢失  3、实现窗口的新建功能  4 、实现窗口的撤销功能

下面详细说明,主要是将自己不熟悉的技术方法列出:

1、画出图像

图像的绘制在视图类中实现,实现过程是:按下左键,移动时画出线条,释放左键就不会画出线条。那么,按下左键时,给绘图程序一个提示,告知其开始绘图,释放左键则给出不许绘图的命令。可通过BOOL变量实现。注意在构造函数中将其设置为FALSE。之后就是绘图,按下左键后,随着点的移动画出线,主要是moveto lineto函数。

还有一些其它的设定,例如,按下左键后,鼠标应变为十字型。

以及鼠标移动时不应超出客户区范围。

 

 

 

2.改变窗口时数据不丢失

改变窗口时,程序会自动调用OnDraw重绘,此时,鼠标画出的数据并没有保存,并且,OnDraw里没有数据,造成了屏幕的清空。因此,设计思路应该是这样的:将画出的线条数据保存在数组,并在重绘时重新绘制上去。

开辟一个数组,存储线条数据,这个数组应该是动态增长的。另外,为了描述线条数据,需要建立一个新类。这个类里,可以描述线上的每个点,两个点一组,既可以存储起来,又便于绘制。因此,这个类里有个操作可以是为了绘制线条。

这个类派生于CObject,下边的动态数组是CObArray。

这个类的头文件如下:

 

其cpp如下:

 

 

这个类建立好后就可以存储线条。

在DOC中存储数据,这个,在视图类中可以很方便的通过

 CSingalDocMutiViewDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);

获取DOC的指针,进而对里边的数据进行操作。

 

开辟最重要的存取数组指针:

CObArray m_pLineArray;

添加一个函数,具有这样的功能,画一段线条,就将这个线条添加进数组中。

 

 

这样以来,线条就全部添加进了数组,需要创建一个函数,统计处有多少个线条被存储起来。

 

 

那么,这样就可以画线条了吗,画线条的功能在CLineDraw中,并且,要使用CObAraay数组中的数据,需要用GetAt函数将其取出,因此,设计如下功能函数:

 

 

这个函数中,类型是新建类CLineDraw *类型,并且得到每个线条的索引,CLineDraw 里可以绘制每个线条,故,得到索引后调用DrawLine函数即可将线段绘制出。

在OnDraw中添加如下代码:

 

至此,就可以保存绘制后的数据。

 

 

3、实现窗口的新建功能

窗口新建,就是建立新的窗口,在这个画面上将数据清除。

在DOC中重载DeleteContents函数即可。

实现代码如下:

 

4、实现窗口的撤销功能

撤销,也就是将先前的数据删除。

在DOC中添加OnEditUndo函数

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击