- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
小型绘图系统课程设计汇编
东华理工大学信息工程学院
《计算机图形学》
课程设计报告
题目
:
小型绘图系统
姓名
:
梁启龙
学号
:
座机电话号码0134
班级
:
1320701
指导教师
:
桂颖
完成时间
:
2016年 月日
二.详细设计
关于视图是直接基于mfc单文档制作,未能实现静态分切视图功能,实现在视图上部添加控制窗格和控制按钮,视图区用以绘图显示。详细设计如图所示。
动态演示基本图元的绘制过程:
动态演示图元绘制需要添加鼠标响应事件来设置,我的设计思路是这样的,以直线、矩形、圆为例。首先添加一个鼠标左键单击事件void CJjyyView::OnLButtonDown UINT nFlags, CPoint point
在视图类上方定义BOOL型变量m_startRect,设置为确认左键单击可以开始画图元,定义HCURSOR m_HCross,初始化光标为十字型光标,然后用CPoint定义三个过程中需要用到的点:m_ptOrigin;m_OldPoint;m_startPoint;此时把UINT m_ndrawtype;同时定义用以判断画的是什么图形。定义完后再视图类中CJjyyView::CJjyyView 初始化函数:
m_startPoint 0;
m_startRect FALSE;
m_ndrawtype 0;
m_HCross AfxGetApp - LoadStandardCursor IDC_CROSS ;
完成后再buttondown中添加关键代码:
void CJjyyView::OnLButtonDown UINT nFlags, CPoint point CView::OnLButtonDown nFlags, point ;
m_startRect TRUE;//鼠标左键单击,设置可以开始绘制图形 m_startPoint point; //记录起始点 m_OldPoint point;//设置老点也为起始点
::SetCursor m_HCross ;
m_ptOrigin point;
这样左键单击的响应事件就暂时设定终了,随后需要用到buttonup的响应事件来画出图形,使用Ctrl+W也就是mfc classwizard添加鼠标松开的响应,首先添加两行代码重置绘制标志m_startRect FALSE;//重置绘制标志
::ClipCursor NULL ;//解锁光标,即将光标恢复为默认光标
然后添加获取设备句柄函数CClientDC dc this ;然后用dc.SelectStockObject NULL_BRUSH ;设置画刷为空画刷。
接下来使用一个switch(m_ndrawtype)来判别选择画哪一种图形,首先case1就设置为画直线:添加画直线代码:
dc.MoveTo m_startPoint ;
dc.LineTo m_OldPoint ; 这两句是擦去MouseMove消息响应中绘制的最后一次临时线,然后输入
dc.MoveTo m_startPoint ; dc.LineTo point ;
绘制固定线。Break结束。接下来case2即是加入画矩形的代码:
dc.Rectangle CRect m_startPoint,m_OldPoint ;
dc.Rectangle CRect m_startPoint,point ;
画圆也是依次类推,过程中都是直接调用了vc中现有的函数用以绘制图形,所以这几部很简单就做好了。画圆的代码为:
dc.Ellipse CRect m_startPoint,m_OldPoint ; dc.Ellipse CRect m_startPoint,point ;
用以上方法在有算法和可选函数的情况下基本都能画出想要的图元了,然而这样的绘制方法并不能让人在画图的时候看到临时线而判断画出的是不是想要的图形,这样就要用到mousemove消息响应机制。
添加了mousemove类后在其中加入代码:CDC *pDC GetDC ;
::SetCursor m_HCross ; CClientDC dc this ;
dc.SetROP2 R2_NOT ;
dc.SetROP2 R2_NOT ;此处用两次取反来实现临时线的绘制和擦去,然后这里和bottonup中需要设置一个同样的switch()来判定所画图形,但不同的是在循环前要加入一个if TRUE m_startRect ,根据是否有单击判定是否可以画图形,用直线做实例:case 1://LINE ::SetCursor m_HCross ; //擦去上一次绘制的临时线 dc.MoveTo m_startPoint ; dc.LineT
文档评论(0)