大学Visual C案例教程_16791

上传人:仙*** 文档编号:243821206 上传时间:2024-09-30 格式:PPT 页数:36 大小:1.54MB
返回 下载 相关 举报
大学Visual C案例教程_16791_第1页
第1页 / 共36页
大学Visual C案例教程_16791_第2页
第2页 / 共36页
大学Visual C案例教程_16791_第3页
第3页 / 共36页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,大学Visual C+案例教程,第三讲 图形设备接口和资源编程,西安交通大学,计算机教学实验中心,http:/,教学目标,Windows,的图形设备接口,MFC,的设备环境类和图形对象,授课内容,3.1,设备环境类和图形对象,3.2,库存图形对象,3.3,画笔与画刷,3.4,字体,3.5,绘图模式,3.6 GDI,坐标系,3.7 WINDOWS,应用程序资源,3.8,位图,3.9,菜单,3.10,图标、快捷键和字符串表,3.11,工具条与状态条,3.12,更新命令用户接口消息,3.1,设备环境类和图形对象,设备环境,图形设备接口,MFC,应用程序在硬件上绘图的抽象层次,应用程序,MFC,设备环境类,图形设备接口(,GDI),设备驱动程序,物理设备硬件,设备环境,在,Windows,程序中,应用程序的输出并不直接面向物理的设备,如显示屏或打印机,而是针对一个称之为设备环境(,Device Context,)的逻辑设备进行操作,设备环境与实际设备之间的信息传送由,Windows,直接管理,。,设备环境类,CDC,类,CPaintDC,CClientDC,CWindowDC,CMetaFileDC,图形对象类,CGdiObject,类,CPen,CBrush,CFont,CBitmap,CPalette,CRgn,3.2,库存图形对象,virtual,CGdiObject,*,SelectStockObject,(int,nIndex,);,nIndex,指定要创建的图形对象,图形对象说明,BLACK_PEN,黑笔,NULL_PEN,空笔,不画线或边框,WHITE_PEN,白笔,BLACK_BRUSH,黑色刷子,WHITE_BRUSH,白色刷子,DKGRAY_BRUSH,暗灰刷子,GRAY_BRUSH,灰色刷子,LTGRAY_BRUSH,淡灰色刷子,NULL_BRUSH,空刷子,内部不填充,ANSI_FIXED_FONTWindows,固定倾角(单间隔)系统字体,ANSI_VAR_FONTWindows,可变倾角(比例间隔)系统字体,DEFAULT_GUI_FONT,缺省,GUI,字体(如菜单和对话框字体),SYSTEM_FONT,系统字体,不必存储和恢复原来的图形对象,【,例,】,用鼠标切换椭圆的图形参数,修改文档类的定义(头文件),加入二个变量定义:,class,CMyDoc,:public,CDocument,protected:/create from serialization only,CMyDoc,();,DECLARE_DYNCREATE(CMyDoc,),/Attributes,public:,int,m_nColor,;,CRect,m_rectEllipse,;,/Operations,public:,(,以下省略文档类的其它定义语句,),【,例,】,用鼠标切换椭圆的图形参数(续1),修改文档类的,OnNewDocument,函数,对变量进行初始化:,BOOL,CMyDoc:OnNewDocument,(),if(!,CDocument:OnNewDocument,(),return FALSE;,/TODO:add,reinitialization,code here,/(SDI documents will reuse this document),m_rectEllipse,=CRect(100,100,300,250);,m_nColor,=0;,return TRUE;,【,例,】,用鼠标切换椭圆的图形参数(续2),修改视图类的,OnDraw,函数,加入显示椭圆代码:,void,CMyView:OnDraw(CDC,*,pDC,),CMyDoc,*,pDoc,=,GetDocument,();,ASSERT_VALID(pDoc,);,/TODO:add draw code for native data here,switch(pDoc,-,m_nColor,)/,根据颜色变量值决定用不同的画刷,case 0:,pDC,-,SelectStockObject(GRAY_BRUSH);break,;,case 1:,pDC,-,SelectStockObject(LTGRAY_BRUSH);break,;,case 2:,pDC,-,SelectStockObject(BLACK_BRUSH);break,;,pDC,-,Ellipse(pDoc,-,m_rectEllipse,);/,画椭圆,【,例,】,用鼠标切换椭圆的图形参数(续3),用,ClassWizard,建立鼠标左键的消息处理函数,并加入代码,void,CMyView:OnLButtonDown(UINT,nFlags,CPoint,point),/TODO:Add your message handler code here and/or call default,CMyDoc,*,pDoc,=,GetDocument,();,ASSERT_VALID(pDoc,);,if(pDoc,-,m_rectEllipse.PtInRect(point,)/,判断鼠标是否点在椭圆内,pDoc,-,m_nColor,=(,pDoc,-m_nColor+1)%3;/,修改颜色变量值,InvalidateRect(pDoc,-,m_rectEllipse,);,CView:OnLButtonDown(nFlags,point);,3.3,画笔与画刷,画笔是用来画线的工具,是,CPen,类的对象,成员函数,CreatePen,(),用于创建画笔,其原型为:,BOOL,CreatePen,(int,nPenStyle,int,nWidth,COLORREF,crColor,);,第,1,个参数是画笔样式,可取,:,画笔样式,说明,PS_SOLID,创建实线笔,PS_DASH,创建由短线构成的虚线,PS_DOT,创建由点构成的虚线,PS_DASHDOT,创建由短线和点构成的虚线,PS_DASHDOTDOT,创建由短线、点、点构成的虚线,PS_NULL,创建空(空白)画笔,CBrush,类,画刷是用来填充图形的工具,是,CBrush,类的对象,创建画刷的成员函数的原型为:,BOOL,CreateSolidBrush,(COLORREF,crColor,);,BOOL,CreateHatchBrush(int,nIndex,COLORREF,crColor,);,其中参数,nIndex,指定了阴影风格,可取值为:,阴影风格说明,HS_BDIAGONAL,从左下角到右上角的45度斜线,HS_CROSS,水平线与垂直线,HS_DIAGCROSS,相互垂直的45度线,HS_FDIAGONAL,从左上角到右下角的45度斜线,HS_HORIZONTAL,水平线,HS_VERTICAL,垂直线,图形对象的使用,创建新的,GDI,对象,CreatePen,();,CreateSolidBrush,();,CreateHatchBrush,();,将,GDI,对象选入到,DC,中,保存原有,GDI,对象指针,pOld,=,pDC,-,SelectObject,();,绘图,恢复原有,GDI,对象,pDC,-,SelectObject(,pOld,),;,CDC:SelectObject,(),函数原型,CPen,*,SelectObject,(,CPen,*,pPen,);,CBrush,*,SelectObject,(,CBrush,*,pBrush,);,virtual,CFont,*,SelectObject,(,CFont,*,pFont,);,【,例,】,用鼠标切换椭圆的图形参数(续),void,CMyView:OnDraw(CDC,*,pDC,),CMyDoc,*,pDoc,=,GetDocument,();,ASSERT_VALID(pDoc,);,/TODO:add draw code for native data here,CBrush,brushNew,*,pbrushOld,;,CPen,penNew,*,ppenOld,;,switch(pDoc,-,m_nColor,),/,根据颜色变量值决定创建不同的画刷和画笔,case 0:,brushNew.CreateSolidBrush(RGB(255,0,0);,penNew.CreatePen(PS_DASH,1,RGB(0,0,0);,break;,case 1:,brushNew.CreateHatchBrush(HS_DIAGCROSS,RGB(0,255,0);,penNew.CreatePen(PS_SOLID,1,RGB(255,0,0);,break;,case 2:,brushNew.CreateSolidBrush(RGB(0,0,255);,penNew.CreatePen(PS_SOLID,3,RGB(0,255,0);,break;,pbrushOld,=,pDC,-,SelectObject(&brushNew,);,/,使用新的画,刷,,保存原来的画,刷,以便恢复,ppenOld,=,pDC,-,SelectObject(&penNew,);,/,使用新的画笔,保存原来的画笔以便恢复,pDC,-,Ellipse(,pDoc,-,m_rectEllipse,);,/,画椭圆,使用新画刷和新画笔,pDC,-,SelectObject(pbrushOld,);,/,恢复原来的画刷,pDC,-,SelectObject(ppenOld,);,/,恢复原来的画笔,3.4,字体,描述输出文字的字体可用,CFont,对象。,CFont,对象的使用方法与画笔、画刷类似,BOOL,CreateFont,(,int,nHeight,/,字符逻辑高度,int,nWidth,/,字体逻辑宽度,int,nEscapement,/,出口矢量与,X,轴的角度,int,nOrientation,/,字符基线与,X,轴的角度,int,nWeight,/,字体磅值,BYTE,bItalic,/,非,0,则为斜体,BYTE,bUnderline,/,非,0,则加下划线,BYTE,cStrikeOut,/,非,0,则加删除线,BYTE,nCharSet,/,此字体的字符集,BYTE,nOutPrecision,/,输出精度,BYTE,nClipPrecision,/,裁剪精度,BYTE,nQuality,/,输出质量,BYTE,nPitchAndFamily,/,调距和字体族,LPCTSTR,lpszFacename,);/,字体的字型名,3.5,绘图模式,绘图模式由,CDC,的成员函数,SetROP2(),设定,其原型为:,int,SetROP2(,int,nDrawMode,);,其中,R2_NOT,模式可保证所绘图形是可见的,即如果画笔色与背景色相同,则以与背景色相反的颜色作图。,3.6 GDI,坐标系,GDI,支持两种类型的坐标系,:,逻辑坐标系,:,按坐标设置方式(又称为映射模式)可分为,8,种,最常用(也是缺省设置)的映射模式是,MM_TEXT,设备坐标系,客户区坐标系统,屏幕坐标系统,窗口坐标系统。,3.7 Windows,应用程序资源,资源,:是一种数据,它包含了决定程序的用户界面的文本和图形。,资源所决定的,界面元素,有:,菜单,加速键,位图、光标、图标,对话框、控件,字符串,工具栏,资源脚本文件和资源头文件,资源文件,.,rc,定义资源内容,资源通过,资源标识符,加以区别,资源头文件,Resource.h,定义一个项目中所有的资源标识符,3.
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!