《文档视图结构2-VC++软件开发课件.ppt》由会员分享,可在线阅读,更多相关《文档视图结构2-VC++软件开发课件.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院文档文档/视图结构视图结构 II视图与图形显示视图与图形显示VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院主要内容主要内容uu设备环境的操作机制设备环境的操作机制n设备环境介绍设备环境介绍设备环境介绍设备环境介绍n图形对象介绍图形对象介绍图形对象介绍图形对象介绍n常用绘图函数常用绘图函数常用绘图函数常用绘图函数VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院一、一、设备环境与绘图显示设备环境与绘图显示uuWindows是一个与设备无关的操作系统,是一个与设备无关的操作系统,不允许直接访问硬件,不允许直接
2、访问硬件,如果用户想将文本如果用户想将文本和图形绘制到显示器或其他某个设备,必和图形绘制到显示器或其他某个设备,必须通过须通过“设备环境设备环境”这个抽象层与硬件进这个抽象层与硬件进行通信行通信。uu设备环境与图形对象设备环境与图形对象,协同完成绘图显示,协同完成绘图显示工作。就像画家绘图一样,工作。就像画家绘图一样,设备环境好比设备环境好比是画家的画布是画家的画布,图形对象好比是画家的画图形对象好比是画家的画笔笔,用画笔的画布上绘画,不同的画笔画,用画笔的画布上绘画,不同的画笔画出不同的画。出不同的画。选择合适的图形对象和绘图选择合适的图形对象和绘图函数,才能按要求完成绘图任务。函数,才能按
3、要求完成绘图任务。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.1 设备环境类设备环境类uu设备环境设备环境(Device Context)是是把应用程把应用程序与设备驱动器相联的序与设备驱动器相联的一种数据结构一种数据结构,设,设备环境实际上相当于一个画布,所有的绘备环境实际上相当于一个画布,所有的绘图操作在上面进行。图操作在上面进行。uuMFC提供了设备环境类,它们能使提供了设备环境类,它们能使DC 的的处理更容易。处理更容易。uuWindows图形设备接口功能被封装在两图形设备接口功能被封装在两个个MFC类中:类中:设备环境类设备环境类CDC和图形设备和图形设备接口对
4、象类接口对象类GDI(Graphics Device Interface)。)。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.2.1 CClientDCuuCClientDC直接由直接由CDC继承而来,用于客继承而来,用于客户的输出。户的输出。CClientDC 对象封装对一个对象封装对一个只只表示窗口工作区表示窗口工作区的设备环境的处理。的设备环境的处理。CClientDC 构造函数调用构造函数调用 GetDC 函数,函数,析构函数调用析构函数调用 ReleaseDC 函数。函数。VC+软件开发软件开发广州大学
5、华软软件学院广州大学华软软件学院1.2.2 CPaintDCuuCPaintDC对象代表一个对象代表一个窗口的绘图画面窗口的绘图画面,用于响应窗口重绘消息用于响应窗口重绘消息WM_PAINT。uuCPaintDC在构造时执行在构造时执行BeginPaint,在析构时执行在析构时执行EndPaint。EndPaint()函数总是与函数总是与BeginPaint()的调用相伴随,的调用相伴随,它除了释放图形设备外,还负责从消息队它除了释放图形设备外,还负责从消息队列中清除列中清除WM_PAINT消息。消息。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.2.3 CMetaFile
6、DCuuCMetaFileDC对象封装了在对象封装了在一个一个Windows图元文件中绘画图元文件中绘画;uu要实现一个要实现一个Windows元文件,首先创建一元文件,首先创建一个个CMetaFileDC对象;激活对象;激活CMetaFileDC构造函数,然后调用构造函数,然后调用Create成员函数创建一个成员函数创建一个Windows元文元文件设备环境,并将它连接到此件设备环境,并将它连接到此CMetaFileDC对象上。对象上。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院uu利用向导创建的程序或类中,已经自
7、动加利用向导创建的程序或类中,已经自动加入了创建入了创建DC所需要的代码。在文档视结所需要的代码。在文档视结构的程序中典型的构的程序中典型的OnDraw函数函数:void CMyView:OnDraw(CDC*/*pDC*/)CMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;/TODO:在此处为本机数据添加绘制代码在此处为本机数据添加绘制代码该指针默认是被注释的。该指针默认是被注释的。二、二、DC的使用的使用VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院2.1 其他函数使用其他函数使用DC的方法的方法uuW
8、indows限制了可用设备环境的数目限制了可用设备环境的数目(同时只能有(同时只能有5个),并且,不删除它在程个),并且,不删除它在程序退出前会丢失一部分内存。序退出前会丢失一部分内存。方法一:方法一:方法一:方法一:在栈中构造对象,析构函数在函数返回时自动在栈中构造对象,析构函数在函数返回时自动在栈中构造对象,析构函数在函数返回时自动在栈中构造对象,析构函数在函数返回时自动触发触发触发触发void CMyView:OnRButtonUp(UINT nFlags,void CMyView:OnRButtonUp(UINT nFlags,CPoint point)CPoint point)CRe
9、ct rect;CRect rect;CClientDC CClientDC dc(this);dc(this);/在栈中构造在栈中构造在栈中构造在栈中构造dcdc,根,根,根,根据自己需要的类型,可以构造上述据自己需要的类型,可以构造上述据自己需要的类型,可以构造上述据自己需要的类型,可以构造上述4 4种种种种dcdc dc.GetClipBox(rect);dc.GetClipBox(rect);/dc/dc 自动释放自动释放自动释放自动释放VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院三、三、GDI对象对象uu
10、MFC将将Windows中的中的GDI转化为转化为C+形式的类形式的类。uuCGdiObject类是基类,提供了许多派生类是基类,提供了许多派生类管理,如位图、区域、画刷、画笔、调类管理,如位图、区域、画刷、画笔、调色板和字体等。色板和字体等。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院3.2 画笔画笔uu画笔用于画笔用于绘制对象的边框以及直线和曲线。绘制对象的边框以及直线和曲线。默认画笔画一条与一个像素等宽的黑色实默认画笔画一条与一个像素等宽的黑色实线。线。MFC用用CPen类来封装这一类来封装这一GDI对象。对
11、象。CPen也是由也是由CGdiObject派生来的派生来的 uu画笔的属性画笔的属性 画笔通常具有画笔通常具有画笔通常具有画笔通常具有宽度、样式和颜色宽度、样式和颜色宽度、样式和颜色宽度、样式和颜色3 3种属性。画种属性。画种属性。画种属性。画笔的宽度即所画的线条宽度,是设备单位表示笔的宽度即所画的线条宽度,是设备单位表示笔的宽度即所画的线条宽度,是设备单位表示笔的宽度即所画的线条宽度,是设备单位表示的。默认的画笔宽度是一个像素单位。的。默认的画笔宽度是一个像素单位。的。默认的画笔宽度是一个像素单位。的。默认的画笔宽度是一个像素单位。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件
12、学院3.3 位图位图uu位图是位图是图像存储的一种数据格式,它使用像图像存储的一种数据格式,它使用像素阵列来保存素阵列来保存。位图的大小由像素阵列的大小。位图的大小由像素阵列的大小和每一个像素的位数决定。按像素位数可以将和每一个像素的位数决定。按像素位数可以将位图分为位图分为1位(单色)、位(单色)、4位(位(16色)、色)、8位位(256色)和色)和16位(增强色,共位(增强色,共32768种颜种颜色)位图,另外还有色)位图,另外还有24位真彩色位图。位数位真彩色位图。位数越大,信息越多,图像越逼真。越大,信息越多,图像越逼真。Windows把位图分为两大类:把位图分为两大类:依赖于设备的位
13、图依赖于设备的位图(Device Dependent Bitmap,即,即DDB)和与)和与设备无关的位图设备无关的位图(Device Idependent Bitmap,即,即DIB)。)。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院3.5在在DC中使用中使用GDI对象的步骤对象的步骤 uu定义定义GDI对象对象uu选入选入GDI对象对象 uu删除删除GDI对象对象VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院第一步:定义第一步:定义GDI对象对象例一:例一:例一:例一:CPen myPenCPe
14、n myPen(PS_DOTPS_DOT,1 1,RGBRGB(0 0,0 0,0 0);例二:例二:例二:例二:CPen myPen1;/CPen myPen1;/先构造先构造先构造先构造if if(myPen1.CreatePenmyPen1.CreatePen(PS_DOTPS_DOT,1 1,RGBRGB(0 0,0 0,0 0)/后进行初始化后进行初始化后进行初始化后进行初始化 /可以开始使用可以开始使用可以开始使用可以开始使用elseelse /构造不成功构造不成功构造不成功构造不成功VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院第二步:选入第二步:选入GDI对象对
15、象 选入选入选入选入GDIGDI对象可以使用对象可以使用对象可以使用对象可以使用SelectObjectSelectObject()函数()函数()函数()函数来完成。此函数对各种来完成。此函数对各种来完成。此函数对各种来完成。此函数对各种GDIGDI对象都有重载。如:对象都有重载。如:对象都有重载。如:对象都有重载。如:CPen*SelectObjectCPen*SelectObject(CPen*pPenCPen*pPen);在选入当前的在选入当前的在选入当前的在选入当前的CPenCPen对象时返回指向原有的对象时返回指向原有的对象时返回指向原有的对象时返回指向原有的CPenCPen对象的
16、指针。对象的指针。对象的指针。对象的指针。在完成绘图后需要使用此指针在完成绘图后需要使用此指针在完成绘图后需要使用此指针在完成绘图后需要使用此指针恢复原有对象恢复原有对象恢复原有对象恢复原有对象。如:。如:。如:。如:CPen*pOldPen=SelectObjectCPen*pOldPen=SelectObject(myPenmyPen);/进行绘图的代码略进行绘图的代码略进行绘图的代码略进行绘图的代码略SelectObjectSelectObject(pOldPenpOldPen);VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院第三步:删除第三步:删除GDI对象对象 如果不
17、再使用某一对象可以调用如果不再使用某一对象可以调用CGdiObject:DeleteObject()成员函数将成员函数将其删除。其删除。注意:已经选入注意:已经选入DC中的对象不能删除。中的对象不能删除。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院四、四、简单图形函数简单图形函数1.画点画点uuSetPixel()():用指定的颜色画一个像素用指定的颜色画一个像素,返,返回绘制时使用的实际颜色;回绘制时使用的实际颜色;uuSetPixelV():与上面的基本相同,但不():与上面的基本相同,但不用返回绘制时使用的实际颜色,所以速度更用返回绘制时使用的实际颜色,所以速度更快;快
18、;VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院3.画形状画形状 uuRectangle():画矩形区域;():画矩形区域;uuRoundRect():画一个圆角矩形;():画一个圆角矩形;uuPolygon():画一个多边形():画一个多边形uuPolyPolygon():创建一个或多个多边形():创建一个或多个多边形uuEllipse():画椭圆():画椭圆uuPie():用于画饼图;():用于画饼图;uuDraw3dRect():画三维矩形;():画三维矩形;uuDrawEdge():():画矩形的边缘;画矩形
19、的边缘;uuDrawFrameControl():画框架控件():画框架控件VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院4.形状填充和翻转形状填充和翻转uuFillRect():():填充矩形;填充矩形;uuInvertRect():():反转矩形的颜色反转矩形的颜色;uuFrameRect():():画矩形的边框;画矩形的边框;uuFillSolidRect():():用用某单色填充矩形;用用某单色填充矩形;uuExtFloodFill():():用当前画刷填充一个区用当前画刷填充一个区域域;uuFillRgn():():填充一个区域;填充一个区域;uuFrameRgn()
20、:画一个特定区域的边框;():画一个特定区域的边框;uuInvertRgn():():反转一个区域的颜色反转一个区域的颜色。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院5.绘制文本绘制文本uuTextOut():在指定的位置,输出一个字():在指定的位置,输出一个字符串;符串;uuExtTextOut():在矩形区域里输出一个():在矩形区域里输出一个字符串;字符串;uuTabbedTextOut():基于用该函数传输的():基于用该函数传输的一个表,在指定位置输出一串字符串,并一个表,在指定位置输出一串字符串,并将字符串中的任何制表符转换为空格;将字符串中的任何制表符转换为空格;uuDrawText():在指定的矩形域里绘制文():在指定的矩形域里绘制文本本;VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院