图形设备接口和绘图_第1页
图形设备接口和绘图_第2页
图形设备接口和绘图_第3页
图形设备接口和绘图_第4页
图形设备接口和绘图_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、 本章内容设备环境和设备环境类GDI绘图对象及其管理映射模式CDC中的绘图操作及其特点绘制文本 Windows的图形设备接口Windows图形设备接口(GDI,Graphics Device Interface)是为与设备无关的图形设计的。所谓设备无关性,就是操作系统屏蔽了硬件设备的差异。因为计算机常与一系列不同的设备结合在一起,如打印机、绘图仪等输出设备以及显示设备等,因而设备无关性的图形能使用户编程时无需考虑特殊的硬件设置,这对Windows编程来说是非常重要的。Windows应用程序使用图形设备接口和Windows设备驱动程序来支持与设备无关的图形。图形设备接口(GDl)是Windows

2、系统的重要组成局部,负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字。 Windows的图形设备接口计算机输出设备和显示设备种类繁多,包括不同技术标准的显示器、打印机、绘图仪等,每类设备又包含许多不同的型号。为了适应不同的设备,Windows系统提供给用程序与具体设备别离的功能。操作系统管理并协调一系列输出设备驱动程序,将应用程序的图形输出请求转换为打印机、绘图仪、显示器或其他输出设备上的输出。GDI的设备无关性是Windows操作系统的特色之一。对于开发人员而言,所要做的工作仅仅是在系统的帮助下建立一个与某个实际输出设备的关联,以要求系统加载相应的设备驱动程序,其他的

3、具体输出操作那么由系统实现。Windows系统分担了应用程序的硬件设备适配器功能。设备描述表(Device Context)设备描述表是一个用来确定任何设备的GDI输出的位置和形象的属性的集合。应用程序并不能直接存取设备描述表,但是,应用程序可以使用设备描述表的句柄来间接地存取设备描述表及其属性。当程序为设备描述表要求一个句柄时,就将创立一个设备描述表。创立的设备描述表包含了它所有的属性和默认值,应用程序可以修改这些属性。应用程序对图形的操作均参照设备描述表中的属性执行。可以将设备描述表看成图形的“输出模板。依靠这块模板,当程序员调用GDI函数输出图形或文字时,不必关心诸如背景颜色、字体等问题

4、。设备描述表(Device Context)设备环境windows保存的一个数据结构,该结构包含应用程序向设备输出时所需要的信息。应用程序MFC设备环境类图形设备接口设备驱动程序 8.1.2 设备环境类设备环境类CDC的分类CClientDC:只能在窗口的用户区绘图.用户区指窗口中除去边框、标题栏、菜单栏、状态栏等的区域、通常先调用窗口的GetClientRect()来获取用户区的大小.CWindowDC:能在窗口的任意位置绘图.通常先调用GetWindowRect()来获取窗口在屏幕坐标系中的外边框坐标.CPaintDC:往往在OnPaint()函数中使用,OnPaint()函数首先构造一个

5、CpaintDC对象,再把它的指针传给OnDraw()函数进行绘图. 8.1.2 设备环境类设备环境类CDC的内容当前GDI绘图对象及其管理映射方式绘图状态管理和绘图操作 8.2 GDI绘图对象及其管理建立设备环境调用BeginPaint()函数应用程序响应WM_PAINT消息进行图形刷新时,由OnPaint()函数调用BeginPaint()函数获取设备环境指针,并把它传递给OnDraw()函数完成绘图.调用GetDC()函数如果绘图工作不是由WM_PAINT消息驱动的那么调用GetDC()函数获取设备环境.8.2.2 GDI对象的分类CPenCBrushCFontCRgnCPaletteC

6、Bitmap 8.2.3 CPen 8.2.3 CPen例:HPEN hpold,hpnew;hpnew=(HPEN)GetStockObject(BLACK_PEN);hpold=(HPEN)pDC-SelectObject(hpnew);pDC-MoveTo(10,10);pDC-LineTo(100,100);pDC-SelectObject(hpold); 8.2.3 CPen 8.2.3 CPen例:CPen myPen,*oldPen;myPen.CreatePen(PS_SOLID,10,RGB(255,0,0);oldPen=(CPen*)pDC-SelectObject(&m

7、yPen);pDC-MoveTo(10,10);pDC-LineTo(100,100);pDC-SelectObject(oldPen); 8.2.4 CBrush 8.2.4 CBrush例:HBRUSH hb,oldhb;hb=(HBRUSH)GetStockObject(BLACK_BRUSH);oldhb=(HBRUSH)pDC-SelectObject(hb);pDC-Rectangle(20,20,200,200);pDC-SelectObject(oldhb);8.2.4 CBrush 8.2.4 CBrush 8.2.4 CBrush例:CBrush myBrush,*oldB

8、rush;myBrush.CreateHatchBrush(HS_CROSS,RGB(255,0,0);oldBrush=pDC-SelectObject(&myBrush);pDC-Rectangle(20,20,200,200);pDC-SelectObject(oldBrush); 8.2.5 CFont 8.2.5 CFont中文的字体是很丰富的,目前有40多种字体但是,系统提供的字体往往还不能满足应用程序的需要.程序员可调用GreateFont() 、CreatFontIndirect() 、CreatPointFont()、CreatPointFontIndex()创立自定义字体.

9、 8.2.5 CFont 8.2.5 CFont例: 8.2.5 CFont例:for(int i=5;iSelectObject(&font);pDC-TextOut(30,50*i-200,使用CreatFont()创立字体);pDC-SelectObject(oldFont); 8.2.5 CFont当调用CreatFontIndirect()函数时,必须使用LOGFONT结构来构造CFont对象来绘制字体,LOGFONT结构如下:Typedef struct tagLOGFONTLONG lfHeight;LONG lfWidth;LONG lfEscapement;LONG lfOr

10、ientation;LONG lfWeight;BYTE lfItalic;BYTE lfUnderline;BYTE lfStrikeOut;BYTE lfCharSet;BYTE lfOutPrecision;BYTE lfClipPrecision;BYTE lfQuality;BYTE lfPitchAndFamility;BYTE lfFaceNameLF_FACESIZE;LOGFONT 8.2.5 CFont例: 8.2.5 CFont例:LOGFONT lf;lf.lfHeight=40;lf.lfWidth=20;lf.lfItalic=true;lf.lfUnderline

11、=true;lf.lfOrientation=0;lf.lfWeight=800;lf.lfEscapement=0;lf.lfCharSet=GB2312_CHARSET;CFont font;font.CreateFontIndirect(&lf);CFont *old=pDC-SelectObject(&font);pDC-TextOut(0,200,使用CreatFontIndirect()创立字体);pDC-SelectObject(old);8.4CDC中的绘图操作及其特点设置绘图参数设置绘图模式int SetRop2(int DrawMode);设置背景颜色Virtual COL

12、ORREF SetBKColor(COLOREF crColor);设置背景模式Int SetBKMode(int nBKMode);nBKMode OPAQUE(不透光:输出文本模式,默认值nBKMode TRANSPARENT(透明:绘制之前背景色不改变绘图函数8.4CDC中的绘图操作及其特点绘图函数点CPoint GetCurrentPosition();CPoint MoveTo(int x,int y);CPoint MoveTo(POINT point);直线BOOL LineTo(int x,int y);BOOL LineTo(int x,int y);椭圆Int GetArc

13、Direction();Int SetArcDirection(int nArcDirection);8.4CDC中的绘图操作及其特点绘图函数椭圆绘制椭圆弧线的函数Arc的原型如下: BOOL Arc ( int Xl,intYl,/指定边框矩形左上角的逻辑坐标 intX2,intY2,/指定边框矩形右下角的逻辑坐标 intX3,intY3,/椭圆弧起始径线确实定点坐标 intX4,intY4 /椭圆弧终止径线确实定点坐标 ); x2,y2x3,y3x4,y4x1,y18.4CDC中的绘图操作及其特点绘图函数椭圆使用当前画笔绘制一个饼图,并使用当前画刷进行填充的函数Pie :该函数的原型如下:

14、BOOL Pie( int Xl,intYl, /指定边框矩形左上角的逻辑坐标int X2,int Y2,/指定边框矩形右下角的逻辑坐标intX3,intY3, /椭圆弧起始径线确实定点坐标intX4,intY4 /椭圆弧终止径线确实定点坐标);8.4CDC中的绘图操作及其特点绘图函数椭圆画椭圆BOOL Ellipse(int x1,int y1,int x2,int y2);BOOL Ellipse(LPCRECT lpRect);矩形void FillRect(LPCRECT lpRect,Cbrush *pBrush);void FrameRect(LPCRECT lpRect,Cbru

15、sh *pBrush);BOOL Rectangle(int x1,int y1,int x2,int y2);BOOL Rectangle(LPCRECT lpRect); 8.5 绘制文本文本格式化属性属性文本及背景颜色对齐方式字符间隔文本调整CDC的方法SetTextColor()SetBkColor()SetBkMode()SetTextAlign() 8.5 绘制文本绘制文本函数BOOL TextOut(int x,int y,const Cstrint& str);Virtual int DrawText(LPCTSTR lpszString,int nCount,LPRECT l

16、pRect,UNIT nFormat);int DrawText(const CString &str, LPRECT lpRect,UNIT nFormat);Virtual BOOL ExtTextOut(int x,int y,UNIT nOption,LPCRECT lpRect,LPCTSTR lpszString,UNIT nCount,LPINT lpDxWidths);BOOL ExtTextOut(int x,int y,UNIT nOption,LPCRECT lpRect,const Cstring& str,LPINT lpDxWidths);Virtual Csize

17、 TabbedTextOut(int x,int y,LPCTSTR lpszString,int nCount,int nTabPositions,LPINT lpnTabStopPosition,int nTabOrigin);Csize TabbedTextOut(int x,int y,const Cstring& str, int nTabPositions,LPINT lpnTabStopPosition); 8.6 实例 8.6 实例 CFontView成员变量: LOGFONT m_lFont;COLORREF m_cTextColor;CFontView:CFontView()m_cTextColor=RGB(255,0,0);m_lFont.lfHeight=30;m_lFont.lfWidth=0;m_lFont.lfEscapement=0;m_lFont.lfOrientation=0;m_lFont.lfWeight=FW_

温馨提示

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

评论

0/150

提交评论