VisualC++绘图基础.ppt_第1页
VisualC++绘图基础.ppt_第2页
VisualC++绘图基础.ppt_第3页
VisualC++绘图基础.ppt_第4页
VisualC++绘图基础.ppt_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机图形学与数字地图,第3章 Visual C+绘图基础,Email: ,余接情,本章大纲,1 VC+ 编程入门 2 Window图形绘制基本概念 3 GDI对象及其使用 4 基本图形绘制 5 文本与字体 6 映射模式与绘图模式,1 VC+编程入门,1.1生成一个新的图形界面工程,1 VC+编程入门,1 VC+编程入门,1 VC+编程入门,1.2 如何调试一段代码,1 VC+编程入门,查看变量值,1 VC+编程入门,1 VC+编程入门,1.3 消息机制,Windows 是一个多进程的图形窗口操作系统,Windows应用程序与DOS应用程序有很大的区别。DOS应用程序采用顺序执行过程,而Windows是一个基于事件的消息(Message)驱动系统。 消息(Message)就是关于发生事件的信息。 从程序的观点度看,消息驱动就是由消息来驱动/响应某个函数,消息驱动程序设计是围绕着消息的产生与处理而展开的。,1 VC+编程入门,根据处理函数和处理过程的不同,MFC主要处理三类消息: Windows消息,前缀以“WM_”打头,WM_COMMAND例外。Windows消息直接送给MFC窗口过程处理,窗口过程调用对应的消息处理函数。一般,由窗口对象来处理这类消息,也就是说,这类消息处理函数一般是MFC窗口类的成员函数 控制通知消息,是控制子窗口送给父窗口的WM_COMMAND通知消息。窗口过程调用对应的消息处理函数。一般,由窗口对象来处理这类消息,也就是说,这类消息处理函数一般是MFC窗口类的成员函数。 命令消息,这是来自菜单、工具条按钮、加速键等用户接口对象的WM_COMMAND通知消息,属于应用程序自己定义的消息。通过消息映射机制,MFC框架把命令按一定的路径分发给多种类型的对象(具备消息处理能力)处理,如文档、窗口、应用程序、文档模板等对象。能处理消息映射的类必须从CCmdTarget类派生,1 VC+编程入门,1 VC+编程入门,WinMain ( hInst, hPrev, ) MSG msg; While ( GetMessage (,WndProc ( hWnd, msg, wParam, lParam ) switch ( msg ) case WM_CREATE : case WM_PAINT : case WM_KEYDOWN : case WM_DESTROY : PostQuitMessage(0); break; default : return( DefWindowProc ( . ) ); return (0);,WM_QUIT,void CTestView:OnDraw(CDC* pDC) CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here pDC定义为CDC类的指针。 pDoc通过GetDocument()函数得到了指向文档类CTestDoc的指针。 ASSERT_VALID(pDoc)函数使pDoc指针有效。 使用pDC指针,可以对CDC类的成员函数进行操作。 OnDraw()函数是由系统框架直接调用的,每当窗口重绘时就会自动执行。,OnDraw()函数:,1 VC+编程入门,2.1 图形设备接口(GDI),Windows提供了一个称为图形设备接口GDI(Graphics Device Interface)的抽象接口。GDI作为Windows的重要组成部分,它负责管理用户绘图操作时功能的转换。用户通过调用GDI函数与设备打交道,GDI通过不同设备提供的驱动程序将绘图语句转换为对应的绘图指令,避免了直接对硬件进行操作,从而实现所谓的设备无关性。,2 Window图形绘制基本概念,图形设备接口GDI管理Windows应用程序图形的绘制,在应用程序中,通过调用GDI函数绘制不同尺寸、颜色、风格的几何图形、文本和位图。这些图形处理函数组成了图形设备接口GDI。 MFC(Microsoft Foundation Class) 将GDI函数封装在一个名为CDC的设备环境类中。编程时我们可以通过调用CDC类的成员函数来完成绘图操作。 所谓设备无关性,是指操作系统屏蔽了硬件设备的差异,使用户编程时一般无需考虑设备的类型,如不同种类的显示器或打印机。,2.1 图形设备接口(GDI),2 Window图形绘制基本概念,Windows绘图过程和设备无关性的实现:,GDI处于设备驱动程序的上一层,当程序调用绘图函数时,GDI将绘图命令传送给当前设备的驱动程序,以调用驱动程序提供的接口函数。驱动程序的接口函数将Windows绘图命令转化为设备能够执行的输出命令,实现图形的绘制。不同设备具有不同的驱动程序,设备驱动程序是设备相关的。,2 Window图形绘制基本概念,2.2 设备环境,为了实现设备无关性,应用程序的输出不直接面向显示器等物理设备,而是面向一个称之为设备环境DC(Device Context)的虚拟逻辑设备。 设备环境也称设备描述表或设备上下文,它是由Windows管理的一个数据结构,它保存了绘图操作中一些共同需要设置的信息,如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。 形象地说,一个设备环境提供了一张画布和一些绘画的工具,我们可以使用不同颜色的工具在上面绘制点、线、圆和文本。,2 Window图形绘制基本概念,设备环境中的“设备”是指任何类型的显示器或打印机等输出设备,绘图时用户不用关心所使用设备的编程原理和方法。所有的绘制操作必须通过设备环境进行间接的处理,Windows自动将设备环境所描述的结构映射到相应的物理设备上。 从根本上来说,设备环境DC是一个Windows数据结构,该结构存储着程序向设备输出时所需要的信息,应用程序利用它定义图形对象及其属性,并实现应用程序、设备驱动程序和输出设备之间绘图命令的转换。 在使用任何GDI绘图函数之前,必须建立一个设备环境。,2 Window图形绘制基本概念,1)获取设备环境DC的方法,获取DC的方法有两种:在WM_PAINT消息处理函数中通过调用API函数BeginPaint( )获取设备环境,在消息处理函数返回前调用API函数EndPaint( )释放设备环境。 在其他函数中通过调用API函数GetDC( )获取设备环境,调用API函数ReleaseDC( )释放设备环境。,2 Window图形绘制基本概念,MFC提供了不同类型的DC类,每一个类都封装了DC句柄,并且它们的构造函数自动调用获取DC的API函数,析构函数自动调用释放DC的API函数。因此,在程序中通过声明一个MFC设备环境类的对象就自动获取了一个DC,而当该对象被销毁时就自动释放了获取的DC。MFC AppWizard应用程序向导创建的OnDraw( )函数自动支持所获取的DC。 MFC的DC类包括CDC、CPaintDC、CClientDC、CWindowDC和CMetaFileDC等,其中CDC类是MFC设备环境类的基类,其它的MFC设备环境类都是CDC的派生类。,2 Window图形绘制基本概念,CDC类既作为其它MFC设备环境类的基类,又可以作为一个一般的设备环境类使用。利用它可以访问设备属性和设置绘图属性。CDC类对GDI的所有绘图函数进行了封装。 CPaintDC类是OnPaint()函数使用的设备环境类,它代表一个窗口的绘图画面。如果添加WM_PAINT消息处理函数OnPaint(),就需要使用CPaintDC类来定义一个设备环境对象。 CClientDC类代表了客户区设备环境。当在客户区实时绘图时,需要利用CClientDC类定义一个客户区设备环境。 CWindowDC类代表了整个程序窗口设备环境,可以在整个窗口区域绘图。,2)MFC设备环境类:,2 Window图形绘制基本概念,3)MFC设备环境类层次图,所有设备环境类的基类,对GDI的所有绘图函数进行了封装,用于响应窗口重绘消息的绘图输出,不仅可对客户区进行操作,还可以对非客户区进行操作,代表窗口客户区的设备环境,代表整个窗口的设备环境,包括客户区和非客户区,代表Windows图元文件设备环境,2 Window图形绘制基本概念,3)颜色的设置,Windows用COLORREF类型的数据存放颜色,它是一个32位整数。任何一种颜色都是由红、绿、蓝三种基本颜色组成,COLORREF类型数据的低位字节存放红色强度值,第2个字节存放绿色强度值,第3个字节存放蓝色强度值,高位字节为0,每一种颜色分量的取值范围为0到255。 直接设置COLORREF数据不太方便,Windows提供了RGB宏用于设置颜色,将其中的红、绿、蓝分量值转换为COLORREF类型的颜色数据: RGB(byRed, byGreen, byBlue) 其中参数byRed、byGreen和byBlue分别表示红、绿、蓝分量值(范围0到255)。,2 Window图形绘制基本概念,4)RGB宏,很多涉及到颜色的GDI函数都需要使用COLORREF类型的参数,如设置背景色的成员函数CDC:SetBkColor()、设置文本颜色的成员函数CDC:SetTextColor()。例如:,2 Window图形绘制基本概念,COLORREF rgbBkClr=RGB(192,192,192); / 定义灰色 pDC-SetBkCorlor(rgbBkClr); / 背景色为灰色 pDC-SetTextColor(RGB(0,0,255); / 文本颜色为蓝色,2 Window图形绘制基本概念,1)GDI对象,GDI对象是Windows图形设备接口的抽象绘图工具。除了画笔和画刷,其它GDI对象还包括字体、位图和调色板。 Windows GDI提供了一些绘图对象,程序通过这些GDI对象设置绘图的工具和风格。 MFC对GDI对象进行了很好的封装,提供了封装GDI对象的类,如CPen、CBrush、CFont、CBitmap和CPalette等,这些类都是GDI对象类CGdiObject的派生类。,3 GDI对象及其使用,画笔。绘制对象的边框以及直线和曲线。,画刷。填充一个封闭图形对象内部区域,字体对象。用来绘制文本,位图。装载和操作位图,调色板。包含系统可用的色彩信息,是应用程序和彩色输出设备环境的接口,区域。用于设备环境(通常是窗口)内的区域操作,3 GDI对象及其使用,CDC类提供了成员函数SelectObject()选择用户自己创建的GDI对象,该函数有多种重载形式,可以选择用户已定制好的画笔、画刷、字体和位图等不同类型的GDI对象。 CPen* SelectObject(CPen* pPen); CBrush* SelectObject(CBrush* pBrush); CFont* SelectObject(CFont* pFont); CBitmap* SelectObject(CBitmap* pBitmap); 函数参数是一个指向用户已定制好的GDI对象的指针,选择操作成功函数将返回以前GDI对象的指针,否则返回NULL。,2)选择一个GDI对象,3 GDI对象及其使用,4)使用画笔,当用户创建一个用于绘图的设备环境时,该设备环境自动提供了一个宽度为一个像素单位、风格为实黑线(BLACK_PEN)的缺省画笔。如果要在设备环境使用自己的画笔绘图,首先需要创建一个指定风格的画笔,然后将创建的画笔选入设备环境,最后,在使用该画笔绘图结束后需要释放该画笔。 (1) 创建画笔 创建画笔最简单的方法是调用CPen类的一个带参数的构造函数来构造一个CPen类画笔对象,以下代码创建了一个红色虚线画笔:,2 GDI对象及其使用,CPen PenNew (PS_DASH, 1, RGB(255, 0, 0);,创建画笔的第二种方法是首先构造一个没有初始化的CPen类画笔对象,然后调用成员函数CPen:CreatePen()创建定制的画笔工具: CPen PenNew; PenNew.CreatePen(PS_DASH, 1, RGB(255,0,0); 函数CreatePen()的参数类型与带参数的CPen类构造函数完全一样。当画笔对象的声明与创建不在同一个地方时(如需要多次改变画笔)只有采用这种方法。,3 GDI对象及其使用,创建画笔后必须调用成员函数CDC: SelectObject()将创建的画笔选入当前设备环境。如果选择成功,函数SelectObject( )将返回以前画笔对象的指针。选择新的画笔时应该保存以前的画笔对象,如下代码所示:,(2)选择创建的画笔,2 GDI对象及其使用,CPen* pPenOld pPenOld =pDC-SelectObject(,创建和选择画笔工具后,应用程序就可以使用该画笔绘图。当绘图完成后,应该通过调用成员函数CDC:SelectObject( )恢复设备环境以前的画笔工具,并通过调用成员函数CGdiObject:DeleteObject( )释放GDI对象所占的内存资源,如下代码所示:,(3)还原画笔,3 GDI对象及其使用,pDC-SelectObject(pPenOld); / 恢复设备环境DC中原来的画笔 PenNew.DeleteObject( ); / 删除底层的GDI对象,当创建一个设备环境时,该设备环境自动提供了一个填充色为白色(WHITE_BRUSH)的缺省画刷。与画笔一样,也可以利用MFC画刷类CBrush创建自己的画刷,用于填充图形的绘制。 画刷有三种基本类型:纯色画刷、阴影画刷和图案画刷,CBrush类提供了多个不同重载形式的构造函数。以下创建三种不同类型的画刷:,5)使用画刷,3 GDI对象及其使用,CBrush brush1(RGB(255,0,0); / 创建纯色画刷 CBrush brush2(HS_DIAGCROSS, RGB(0,255,0); / 创建阴影画刷 CBrush brush3( / 创建图案画刷,创建画刷也可先构造一个没有初始化的CBrush类画刷对象,然后调用CBrush类的初始化成员函数创建定制的画刷工具。CBrush类提供的常用创建函数有:CreateSolidBrush( )用指定的颜色创建一个纯色画刷;CreateHatchBrush( )用指定的阴影样式和颜色创建一个阴影画刷;CreatePatternBrush( )用位图创建一个图案画刷;CreateSysColorBrush( )用系统默认颜色创建一个指定阴影样式的画刷。 如下代码创建了一个填充色为红色、图案为垂直相交阴影线的画刷:,3 GDI对象及其使用,CBrush BrushNew; BrushNew.CreateHatchBrush(HS_CROSS, RGB(255, 0, 0);,Windows预定义了一些简单风格的GDI对象,用户使用这些GDI对象时,无需自己创建它们,可以直接将它们选入当前的设备环境,这些GDI对象称作为库存(Stock)对象。库存对象包括库存画笔、库存画刷和库存字体等。 通过调用成员函数CDC:SelectStockObject()可以选择一个库存对象绘图工具,以下代码将库存画笔和库存画刷作为当前的绘图工具:,6)使用GDI库存对象,2 GDI对象及其使用,pPenOld=(CPen*) pDC-SelectStockObject(NULL_PEN); / 使用库存画笔对象 pBrhOld=(CBrush*) pDC-SelectStockObject(LTGRAY _BRUSH); / 使用库存画刷对象,库存画笔、画刷的样式及说明,3 GDI对象及其使用,也可以利用CGdiObject:CreateStockObject()将GDI对象设置成指定的库存对象,这时需要首先声明一个GDI对象,最后还需要调用函数SelectObject()将与库存对象关联的GDI对象选入当前的设备环境,如下代码所示:,2 GDI对象及其使用,CBrush *pBrhOld, BrhNew; BrhNew.CreateStockObject(LTGRAY_BRUSH); / 设置库存画刷对象 pBrhOld= pDC-SelectObject(,生成设备环境、设置绘图属性和选择绘图工具后,就可以开始绘制不同形状的几何图形,Windows中可以绘制的基本几何图形包括点、直线、曲线、矩形、椭圆、弧、扇形、弦形和多边形等。 GDI为提供了绘制基本图形的成员函数,这些函数封装在MFC的CDC类中。 绘图函数使用的坐标都是逻辑坐标。,4 绘制基本图形,1)常用绘图函数,(1) 设置画笔当前位置的函数MoveTo, CPoint MoveTo(int X, int Y) ; CPoint MoveTo(POINT point) ; 参数:x、y为新位置的坐标;point为新位置坐标 返回值:先前位置的坐标 点结构POINT用来表示一点的x、y坐标: 点类CPoint为一个没有基类的独立类,封装了POINT结构,(2) 画点函数: COLORREF SetPixel( POINT point, COLORREF crColor ); COLORREF SetPixel( int x , int y , COLORREF crColor ); /返回值为原来此坐标处的颜色 获取某点的颜色 COLORREF GetPixel( POINT point); COLORREF GetPixel( int x , int y);,4 绘制基本图形,(3) 从当前位置向指定坐标点画直线的函数LineTo, BOOL LineTo(int X,int Y); /X和Y为线段的终点坐标 BOOL LineTo(POINT point);,4 绘制基本图形,(4) 从当前位置开始,依次用线段连接lpPoints中指定的各点 BOOL Polyline ( LPPOINT lpPoints, /指向包含各点坐标的POINT结构数组的指针 int nCount / nCount为POINT数组中点的个数 );,(5) 绘制椭圆弧线的函数Arc, BOOL Arc ( int X1,intY1, /边框矩形左上角的逻辑坐标 int X2,int Y2, /边框矩形右下角的逻辑坐标 int X3,int Y3, /椭圆弧起始点坐标,按逆时针 int X4,int Y4 /椭圆弧终止点坐标 ),4 绘制基本图形,(6) 绘制饼图,并用当前画刷进行填充 BOOL Pie ( int X1,intY1, /边框矩形左上角的逻辑坐标 int X2,int Y2, /边框矩形右下角的逻辑坐标 int X3,int Y3, /椭圆弧起始经线的确定点坐标 int X4,int Y4 /椭圆弧终止经线的确定点坐标 ),4 绘制基本图形,(7) 绘制矩形,并用当前画刷进行填充 BOOL Rectangle(int X1,int Y1,int X2,int Y2),(X1,Y1)和(X2,Y2)分别为矩形的左上角和右下角的逻辑坐标,(8) 绘制圆角矩形,并用当前画刷填充 BOOL RoundRect (int X1,int Y1,int X2,int Y2, int nHeight, int nWidth),圆角的高度和宽度,(9) 绘制椭圆,并用当前画刷填充 BOOL Ellipse(intX1,intY1,intX2,intY2),(10) 绘制多边形,并用当前画刷填充 BOOL Polygon(LPPOINT lpPoints,int nCount),包含各点坐标的 POINT数组的地址,多边形点的个数,4 绘制基本图形,(11) 绘制弓形图,并用当前画刷填充 BOOL Chord( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );,(12) 绘制贝塞尔曲线 BOOL PolyBezier(const POINT *lpPoints,int nCount) / lpPoints指向存储绘制曲线的控制点数组 / nCount是绘制曲线所用的点数目,4 绘制基本图形,4 绘制基本图形,2)实例,4 绘制基本图形,void CMyGraphView:OnDraw(CDC* pDC) CMyGraphDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); for(int xPos=20;xPosSetPixel(xPos,30,RGB(0,0,0); / 绘制像素点 POINT polylpt5=10,100,50,60,120,80, 80,150,30,130; pDC-Polyline(polylpt,5); / 绘制4条折线 POINT polybpt4=150,160,220,60,300,180,330,20; pDC-PolyBezier(polybpt,4); / 绘制贝塞尔曲线,CBrush *pBrhOld; pBrhOld=(CBrush*)pDC-SelectStockObject( LTGRAY_BRUSH); / 使用浅灰色堆画刷 pDC-RoundRect(400,30,550,100,20,20); / 绘制圆角矩形 pDC-Arc(20,200,200,300,200,250,20,200); / 绘制椭圆弧 pDC-Pie(220,200,400,380,380,270,240,220); / 绘制扇形 pDC-Chord(420,120,540,240,520,160,420,180); / 绘制弦形 POINT polygpt5=450,200,530,220,560,300, 480,320,430,280; pDC-Polygon(polygpt,5); / 绘制五边形 pDC-SelectObject(pBrhOld); / 恢复系统默认的画刷 ,4 绘制基本图形,4 绘制基本图形,矢量系统,制图系统,5.1基本的文本输出函数,设置前景色: CDC:SetTextColor(COLORREF nColor); 设置背景色: CDC:SetBkColor(COLORREF nColor); 文本输出函数: CDC:TextOutW (int x,int y,LPCTSTR lpszString, int nCount); CDC:TextOutW (int x,int y,const CString,5 文本与字体,除了前面讲的TextOutW()外,常见的还有ExtTextOutW(): 该函数的原型为: BOOL ExtTextOutW int x, int y, /输出的位置 UINT nOptions,/指定矩形的类型 LPCRECT lpRect,/输出的字符的矩形区域 const CString 该函数用来在一个给定的矩形lpRect区域内输出字符串str,此矩形可以设置为透明的(nOptions=ETO_OPAQUE)或不透明的,当矩形区域为不透明时,用当前的背景色填充矩形。,5 文本与字体,矩形也可以设置为裁剪(nOptions=ETO_CLIPPED)性质或非裁剪性质,当设置为裁剪性质时,所有在矩形外面的字符串将被裁剪掉。 上述参数中,nOptions主要设置矩形的类型,可以为ETO_OPAQUE和ETO_CLIPPED两个值的一个或两个组合; lpDxWidths是一个指向整数数组的指针,此数组中存放以逻辑单位表示的字符间的距离,第n个数代表第n个和n+1个字符之间的距离。该参数为NULL时,则按缺省值处理。,5 文本与字体,BOOL ExtTextOutWint x, int y, UINT nOptions, LPCRECT lpRect, const CString,5.2文本属性控制 1)设置文本的背景色,缺省时,在绘制图形或者输出文本时,背景颜色是白色。可以使用CDC的成员函数SetBkColor函数来设置新的背景颜色,函数原型为: Virtual COLORREF SetBkColor(COLORREF crcolor); 其中参数crcolor用于指定新的背景颜色。 例如要将背景颜色设为红色,可以用以下语句: SetBkColor(RGB(255,0,0);,5 文本与字体,2)控制文本的背景色,在设备描述表中有两项可以影响背景,一个是背景色,另一个是背景模式。背景模式可以为透明的(Transparent)或不透明的(Opaque),缺省为不透明的。当背景模式为不透明时,按背景颜色的值填充字符的空余部分,如果背景模式为透明的,将不用背景颜色填充,保留屏幕上原来的颜色。背景模式可用函数SetBkMode来设置,它设置当前的背景模式并返回原来的背景模式,该函数的原型为: int SetBkMode(int nBkMode) 参数nkbmode指定背景模式,其值可以是OPAQUE或者TRANSPARENT,如果值为OPAQUE,则显示时背景都改变为当前背景颜色。如果值为TRANSPARENT,则不改变背景颜色,此时,任何SetBkColor函数调用都无效,缺省的背景模式为OPAQUE。,5 文本与字体,3)设置文本的排列方式,在文本显示时遇到的另一个问题是文本的排列方式,它控制文本和给定点的相对位置。在一个图形中加字符说明时,常常知道一个字符串的某一个边界,如左边界不应超过某个位置,或右边界不应超过某个位置,或显示的几行字符串的中心点对齐等。利用CDC的成员函数SetTextAlign函数就能方便地实现这种控制,其原型为: UINT SetTextAlign (UINT nFlags);,字符串示例,外接矩形,基线,5 文本与字体,nFlags为文本的对齐方式,其值如下: 第一类在X方向上影响文本对齐方式。 TA_CENTER 使点与外接矩形的中点对齐。 TA_LEFT 使点与外接矩形的左边对齐。这是缺省设置。 TA_RIGHT 使点与外接矩形的右边对齐。 第二类在Y方向上影响文本对齐方式。 TA_BASELINE 使点与选定字体的基线对齐。 TA_BOTTOM 使点与外接矩形的底部对齐。 TA_TOP 使点与外接矩形的顶部对齐。 第三类决定了当文本被写入时,对齐位置是否被更新。 TA_NOUPDATECP 每次调用文本输出函数后不更新当前位置,为缺省设置。 TA_UPDATECP 每次调用文本输出函数后更新X值,新的位置在外接矩形的右边。设置该标记后,TextOutW成员函数指定的坐标被忽略。,5 文本与字体,void CTextAlignView:OnDraw(CDC* pDC ) CTextAlignDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; pDC-SetTextAlign(TA_RIGHT); pDC-TextOutW(200,200,_T(“); pDC-SetTextAlign(TA_LEFT); pDC-TextOutW(200,200,_T(“); pDC-SetTextAlign(TA_CENTER+TA_BOTTOM); pDC-TextOutW(200,200,_T(“); pDC-MoveTo(150,200); pDC-LineTo(250,200); pDC-MoveTo(200,150); pDC-LineTo(200,250); ,4 文本与字体,5 文本与字体,Windows系统本身提供了一些库存字体,对于大多数应用程序,使用库存字体即可完成基本的文本输出功能。 要想使用库存字体,需要使用CDC的成员函数SelectStockObject()来完成,例如: SelectStockObject(OEM_FIXED_FONT); 该语句把终端字体选入设备环境。其实,每个设备环境都有一个缺省字体,对于显示器而言,缺省字体就是SYSTEM_FONT系统字体,如果应用程序不需要执行很复杂的文本输出,使用缺省字体即可。,4)使用库存字体,5 文本与字体,5)创建字体,要创建字体,首先要声明一个CFont对象来表示逻辑字体,然后初始化CFont对象。 用CFont的成员函数CreatePointFont直接创建逻辑字体,函数原型为: BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL ); 其中,字体的高度由nPointSize 指定,它以1/10点数为一个单位。例如该值为100,则字体的高度为10点(1点=0.013837英寸),字体的名称由lpszFaceName指定。下面为使用该函数的典型代码:,5 文本与字体,CClientDC dc(this);/声明客户区设备环境变量dc CFont font; /声明逻辑字体变量font font.CreatePointFont(120, _T(“宋体“) , /删除所建立的字体,6.1 映像模式 一个实际物理屏幕是由若干像素组成的,如1024*768,指的是实际宽度和高度的像素数目。为方便各种情况下的程序开发,Windows提供了几种映像方式,每一种映像方式提供不同的测量单位和坐标原点。,6 映射模式与绘图模式,设置映像方式的方法 int SetMapMode( int nMapMode );,6 映射模式与绘图模式,视口,虚拟窗口,6 映射模式与绘图模式,设置虚拟窗口的原点 CPoint SetWindowOrg( int x, int y ); 设置视口原点 CPoint SetViewportOrg( int x, int y ); 设置虚拟窗口的范围 CSize SetWindowExt( int cx, int cy ); 设置视口的范围 CSize SetViewportExt( int cx, int cy );,6 映射模式与绘图模式,设备坐标到逻辑坐标 Void DPtoLP( LPPOINT lpPoints, int nCount = 1 ) lpPoints, 坐标转换点的数组指针 nCount,为坐标转换点的数目 逻辑坐标到设备坐标 Void LPtoDP( LPPOINT lpPoints, int nCount = 1 ) lpPoints, 坐标转换点的数组指针 nCount,为坐标转换点的数目,6 映射模式与绘图模式,设备坐标系,逻辑坐标系,窗口坐标系,6 映射模式与绘图模式,6 映射模式与绘图模式,void CTest:OnDraw(CDC* pDC) CBDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论