有一个程序,mfc画图教程程序,需要换一下工程名,求好方法

C++课设:简单画图程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C++课设:简单画图程序
上传于|0|0|文档简介
&&在VS2010中实现
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩24页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢下次自动登录
现在的位置:
& 综合 & 正文
使用模式的一个简单例子——画图程序
使用原型模式和抽象工厂模式
部门进行mfc的基础培训,一共4课时,要求最后能够实现一个简单的画图。其实我从学C++开始,就一直听人在说,mfc怎么怎么落后,怎么怎么不面向对象,当时什么也不懂,就一直隔着没碰,做编程实践,也仅仅是一些简单的控制台程序,对于比较高级一些的线程编程也就是在学java时才练了一下。网络编程根本没有接触。现在想想,原来很多东西(特别是软件工程和设计模式)都是纸上谈兵,做了一个如此简单的画图程序,才突然发现原来的抽象工厂、原型模式。。。是这样用的,有了一种醍醐灌顶的感觉。
作为风光一时的霸主级IDE——VC6.0大大简化了win32编程,单从这一点来看,他就很成功。虽然据说他面向对象部分做的很不好,但是作为M$的成熟的应用程序框架,还是有必要学习一下的,就像侯捷老师所说的那样,每一个程序员都应该掌握framework的思想。而且用VC也一样可以写出封装较好的程序,一样可以把OO做的不错。关键的不是IDE,而是我们自己的大脑,所以看csdn上的很多关于比较javaIDE哪个好的都感觉很无聊。
由于讲授mfc的老师拿到的课时比较少,而且我们对mfc的基础基本为零,所以老师就以最简单的方式给我们讲mfc如何运作,如何使用mfc画一条线等等,是面向过程的方式。听明白了以后,我就想把他以面向对象的方式实现。
基本要求很简单,就是完成画图功能,画简单的直线,画曲线,画各种形状,所以抽象出一个公共基类:,然后从这个类派生出一些子类,如、、等。
class CShape : public CObject
...{public:
virtual ~CShape();
//原型模式
virtual CShape* Clone() = 0;
//设置画图为纯虚函数
virtual void DrawShape(CClientDC &dc) = 0;
//取得鼠标按下点的消息
virtual void GetStartPoint(CPoint point) = 0;
virtual void GetEndPoint(CPoint point) = 0;
virtual void GetPoint(CClientDC &dc, CPoint point) = 0;
//设置画笔宽度
void SetPenWidth(int width)
m_iPenWidth =
//设置画笔颜色
void SetPenColor(COLORREF color)
m_iPenColor =
protected:
//禁止复制操作
CShape(const CShape&);
CShape& operator=(const CShape&);
class CLine : public CShape
...{public:
...protected:
CPoint m_ptS
CPoint m_ptE};
class CCurve : public CShape
...{public:
protected:
CArray&CPoint, CPoint& m_arrPointA};
这里小用了一把abstract factory模式将shape做成一个类似于工厂的抽象类,它其中定义了设置画笔颜色、宽度两个普通函数,然后是响应按键信息的纯虚函数GetStartPoint、GetEndPoint、GetMovePoint。子类派生的时候只需要实现这三个函数就好了。不同的子类拥有不同的数据成员,如直线拥有两个点对象,分别保存直线起始点和终止点的位置;曲线拥有一系列点的数组。
当用户需要画直线的时候只需要想windows自带的画图程序那样,在画笔选择框上选中相应的图形即可,这时mfc相应一个何种画笔的信息,如果是直线,返回一个直线对象,如果是曲线,返回一个曲线对象,用户利用这个对象画图即可。View类中只有一个抽象类shape的指针,Doc类中保存图形中点的信息。选择操作都是由shape类型的这个指针完成。这就是一个简单的抽象工厂模式。
当然用户不愿意每画一条线就点选一次画笔,的画图程序有记忆上一次画线种类的方法,这个功能可以用另一个模式完成:原型模式,即在中添加一个纯虚函数,他的返回值是类型的指针,子类实现他,返回子类本身的一个对象。
CShape* CCurve::Clone()...{
return new CC}CShape* CLine::Clone()...{
return new CL}
这样在处理时,访问Doc类中保存图形信息的数组的最后一个元素,这样就可通过调用这个对象的clone操作完成,生成一个新对象的操作,而且这个对象与上一次的对象相同。
让我比较郁闷的是,之前精心画的UML图和工厂模式图无法添加进来!CSDN赶紧改一下~
&&&&推荐文章:
【上篇】【下篇】跪求一画图程序,用MFC在VC环境下实现
要求:通过鼠标、键盘的独立或组合操作,在客户区绘制各种形状的图形(直线、矩形和椭圆等)图形可以填充各种颜色,也可设置其边界的颜色,即使绘制好后也可改变颜色;图形可以任意移动位置;图形可以保存。
09-09-07 &君,已阅读到文档的结尾了呢~~
Windows绘图程序设计报1,mfc绘图程序设计,3d绘图程序设计,3d绘图程序设计 源码,mfcocx绘图程序设计,化工设计绘图程序方法,windows绘图软件,windows绘图,windows自带绘图软件,windows8绘图工具
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Windows绘图程序设计报1
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 mfc画图教程 的文章

 

随机推荐