ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:239.61KB ,
资源ID:17220732      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17220732.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(南工程多媒体技术课设绘图软件Word格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

南工程多媒体技术课设绘图软件Word格式.docx

1、 画椭圆 涂鸦2.2功能界面效果显示绘图功能结构图:3.设置3.1设置实现功能如下: 设置线宽线型 设置颜色3.2功能界面效果显示:3.3设置功能结构图:3相关原理知识介绍1.1实现简单图形的绘制,绘图功能中,有绘制直线、矩形、椭圆、涂鸦等。用到的方法如下:CPoint MoveTo(int x,int y); /直线起点CPoint LineTo(int x,int y); /直线终点BOOL Rectangle(int x1,int y1,int x2,int y2); /绘制矩形BOOL Ellipse(int x1,int y1,int x2,int y2); /绘制椭圆 涂鸦部分,以

2、鼠标移动的轨迹画线。同样要用到MouseMove()函数。使起点为鼠标前一个位置,终点为鼠标当前位置,以画直线的方式完成。对于线型、线宽、颜色的设置,通过使用颜色通用对话框完成。1.2 绘图时需要用到的设备环境类介绍 设备环境类CDC提供了绘制和打印的全部函数。为了能让用户使用一些特殊的设备环境,CDC还派生了CPaintDC、CClientDC、CWindowDC和CMetaFileDC类。 (1)CPaintDC比较特殊,它的构造函数和析构函数都是针对OnPaint进行的,但用户一旦获得相关的CDC指针,就可以将它当成任何设备环境(包括屏幕、打印机)指针来使用。CPaintDC类的构造函数

3、会自动调用BeginPaint,而它的析构函数则会自动调用EndPaint。 (2)CClientDC只能在窗口的客户区(不包括边框、标题栏、菜单栏以及状态栏)中进行绘图,点(0,0)通常指的是客户区的左上角。而CWindowDC允许在窗口的任意位置中进行绘图,点(0,0)指整个窗口的左上角。CWindowDC和CClientDC构造函数分别调用GetWindowDC和GetDC,但它们的析构函数都是调用ReleaseDC函数1.3 CRect类的常用操作 1.4画笔 画笔是Windows应用程序中用来绘制各种直线和曲线的一种图形工具,它可分为修饰画笔和几何画笔两种类型。在这两种类型中,几何画

4、笔的定义最复杂,它不但有修饰画笔的属性,而且还跟画刷的样式、阴影线类型有关,通常用在对绘图有较高要求的场合。而修饰画笔只有简单的几种属性,通常用在简单的直线和曲线等场合。 一个修饰画笔通常具有宽度、风格和颜色三种属性。画笔的宽度用来确定所画的线条宽度,它是用设备单位表示的。默认的画笔宽度是一个像素单位。画笔的颜色确定了所画的线条颜色。画笔的风格确定了所绘图形的线型,它通常有实线、虚线、点线、点划线、双点划线、不可见线和内框线等七种风格。 1.5画刷 画刷用于指定填充的特性,许多窗口、控件以及其他区域都需要用画刷进行填充绘制,它比画笔的内容更加丰富。 画刷的属性通常包括填充色、填充图案和填充样式

5、三种。画刷的填充色和画笔颜色一样,都是使用COLORREF颜色类型,画刷的填充图案通常是用户定义的8 x 8位图,而填充样式往往是CDC内部定义的一些特性,它们都是以HS_为前缀的标识。4设计方法及步骤void CGraphicView:OnLine() / TODO: 在此添加命令处理程序代码 m_nDrawType=1;OnRectangle() m_nDrawType=2;OnEllipse() m_nDrawType=3;OnLButtonDown(UINT nFlags, CPoint point) 在此添加消息处理程序代码和/或调用默认值 /m_ptOrigin=point; :S

6、etCursor(m_HCross);/这一句能防止左键单击的时候,保持鼠标样式不变_ m_ptOrigin=point;_ m_ptOld=point; SetCapture();/捕获鼠标,充分控制鼠标_ m_Dragging=1; RECT Rect; GetClientRect(&Rect);/取得窗口当前显示坐标_ ClientToScreen(&/转换为屏幕坐标_ClipCursor(&/限定光标在指定矩形区域_ if(m_nDrawType=6) SetCursor(m_HCross); /使用新光标 m_bDraw=TRUE; m_ptOld=point; SetCapture

7、(); /捕捉鼠标 CRect rect; GetClientRect(&rect); /获取客户端窗口矩形区域 ClientToScreen(& /转换为屏幕坐标 ClipCursor(rect); /限定鼠标指针不能移出客户窗口 CClientDC dc(this); pt2=point;/当前鼠标按下点赋值给pt2 ckbl=true;/作用和画直线一样,保证只有在按下左键到抬起左键之间的mousemove有用.。 dc.MoveTo(pt1); dc.LineTo(point); if(m_nDrawType=7) CGraphicDoc*pDoc=GetDocument(); pt3

8、=point;/定义pt6也是为了防止混乱,因为前面用的不是pt6,实验的时候会出现错误。 pDoc-str=;/文档类定义 CView:OnLButtonDown(nFlags, point);OnLButtonUp(UINT nFlags, CPoint point) CClientDC dc(this); CPen newPen(PS_SOLID,m_nLineWidth, m_clr); CPen *pOldPen = dc.SelectObject(&newPen); CBrush*pBrush = CBrush:FromHandle(HBRUSH)GetStockObject(NU

9、LL_BRUSH); dc.SelectObject(pBrush); /设置透明画刷 switch (m_nDrawType) case 1: dc.MoveTo(m_ptOrigin); break; case 2: dc.Rectangle(CRect(m_ptOrigin,point); case 3: dc.Ellipse(CRect(m_ptOrigin,point); case 4: dc.SetPixel(point,m_clr); case 5: m_bDraw=FALSE; ReleaseCapture(); /释放鼠标捕获 ClipCursor(NULL); case 6

10、: dc.SetROP2(m_clr);/擦除旧线 dc.LineTo(pt2);/擦除最后一次移动画的线,可有可恶 dc.SetROP2(R2_COPYPEN);/ 设置绘图模式,以当前画笔绘图,即 绘制新线 ckbl=false; pt1=point;/把这次鼠标抬起的点作为下次鼠标按下命令画直线的起点。#与画直线的区别。 if (m_Dragging)_ _ m_Dragging=0; :ReleaseCapture();/结束捕获鼠标_ClipCursor(NULL);/解锁鼠标 CClientDC ClientDC(this); ClientDC.SetROP2(R2_NOTXORP

11、EN); ClientDC.SetROP2(m_clr);/缺省绘图模式,像素为画笔颜色 CPen pen(PS_SOLID,m_nLineWidth,m_clr); ClientDC.SelectObject(&pen);OnLButtonUp(nFlags, point);OnMouseMove(UINT nFlags, CPoint point)/逆转当前屏幕颜色来画线的绘图方式_ CBrush*pBrush = CBrush: ClientDC.SelectObject(pBrush); switch (m_nDrawType) case 1: ClientDC.MoveTo(m_pt

12、Origin); ClientDC.LineTo(m_ptOld); /擦去上一次的线_ ClientDC.LineTo(point);/绘制这一次的临时线_ m_ptOld=point; break; case 2: ClientDC.Rectangle(CRect(m_ptOrigin,m_ptOld); ClientDC.Rectangle(CRect(m_ptOrigin,point); case 3: ClientDC.Ellipse(CRect(m_ptOrigin,m_ptOld); ClientDC.Ellipse(CRect(m_ptOrigin,point); case 5

13、: ClientDC.SelectObject (& ClientDC.MoveTo (m_ptOld); ClientDC.LineTo (point); case 6: CClientDC dc(this); if (ckbl) dc.SetROP2(R2_MERGEPENNOT);/。即擦除旧线 dc.MoveTo(pt1); dc.LineTo(pt2);/第一次移动,擦除鼠标按下画的直线以后每次移动擦除上次移动画的线。 dc.LineTo(point);/重新画线 pt2=point; _OnMouseMove(nFlags, point);Oncolor() CColorDialo

14、g dlg; dlg.m_cc.rgbResult=m_clr; dlg.m_cc.Flags |= CC_RGBINIT | CC_FULLOPEN; if(IDOK=dlg.DoModal() m_clr=dlg.m_cc.rgbResult;OnFileOpen() CString strFilter,str; strFilter=位图文件(.bmp)|*.bmp| CFileDialog dlg(TRUE,NULL,NULL, OFN_FILEMUSTEXIST,strFilter); if(IDOK = dlg.DoModal() str=dlg.GetPathName(); m_h

15、Bmp=LoadImage(NULL,str, IMAGE_BITMAP,0,0,LR_LOADFROMFILE); Invalidate(); / 强制调用OnDraw _OnDot() m_nDrawType=4;OnTuya() m_nDrawType=5;OnXx() CSettingDlg a; a.m_nLineWidth=m_nLineWidth; if(IDOK=a.DoModal() m_nLineWidth=a.m_nLineWidth;OnTc() dlg.m_cc.rgbResult=m_full; m_full=dlg.m_cc.rgbResult;On32783()

16、/折线 m_nDrawType=6;On32782()/文字 m_nDrawType=7;OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)/文字 CGraphicDoc*pDoc=GetDocument();/定义文档类指针 pDoc-str +=(char)nChar; dc.SelectObject(&zz); dc.SetTextColor(m_clr); dc.TextOut(pt3.x,pt3.y,pDoc-str);OnChar(nChar, nRepCnt, nFlags);OnSelect() CRect rectTrue1, rect

17、True2; m_tracker.GetTrueRect(&rectTrue1); m_tracker.m_nStyle &= CRectTracker:resizeInside; m_tracker.m_nStyle = CRectTracker:resizeOutside;rectTrue2); InvalidateRect(rectTrue1.Width() rectTrue2.Width() ? rectTrue1 : rectTrue2);BOOL CGraphicView:OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) Ad

18、d your message handler code here and/or call default CGraphicDoc* pDoc = GetDocument(); if(!m_IsDraw) if (pWnd = this & m_tracker.SetCursor(this, nHitTest) return TRUE; return CView:OnSetCursor(pWnd, nHitTest, message);4总结与设计体会 通过这次综合作业,让我对多媒体编程有了进一步了解,对文字处理,绘图,图片处理,媒体播放,动画都有了一定的认识。对VS2008的使用也由陌生到熟悉,对MFC提供的各种设备环境类有了进一步的认识,并能熟练应用一些常用的类和内置函数。 在实验中遇到的问题让我收获到了很多,也锻炼了自己的动手操作能力和上机能力编程能力,使课上的知识结合到实践中来,但是很多知识还不能灵活运用,以后要注重这方面的培养。教师评语:教师签名:日期:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1