资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第二部分 Win32 SDK编程,绘图的画布窗口客户区参数:,typedef struct _RECT,LONG left;/矩形左上角的x坐标.,LONG top;/矩形左上角的y坐标.,LONG right;/矩形右下角的x坐标.,LONG bottom;/矩形右下角的y坐标.,RECT;,GDI绘图的画布,获得窗口客户区域参数:,BOOL GetClientRect,(,HWND,hWnd,/窗口句柄,LPRECT,lpRect,/矩形结构体地址,);,获取时机:在WM_PAINT消息中获得的是窗口尺寸改变 后的客户区参数,如果想要画出来的图形随窗口变化,需要在该消息中使用该函数。,GDI绘图的画布,设备上显示的图形型态本身可以被分为几类:,设置像素的颜色,COLORREF,SetPixel,(,HDC,hdc,/,设备环境句柄,int,X,/,像素的,x,坐标,int,Y,/,像素的,y,坐标,COLORREF,crColor,/,像素颜色,);,GDI基本图形像素操作,设备上显示的图形型态本身可以被分为几类:,直线和曲线 线条是所有向量图形绘制系统的基础。,GDI,支持直线、矩形、椭圆(包括椭圆的子集,也就是我们所说的圆)、椭圆圆周上的部分曲线即所谓的弧以及贝塞尔曲线(,Bezier,spline,)。所有更复杂的曲线可由折线(,polyline,)代替,折线通过一组非常短的直线来定义一条曲线。线条用设备内容中选中的目前画笔绘制。,GDI基本图形直线,GetCurrentPositionEx(hdc,BOOL MoveToEx,(,HDC,hdc,/设备句柄,int,X,/目标点的x坐标,int,Y,/目标点的y坐标,LPPOINT lpPoint/存放当前点的结构体指针,);,BOOL LineTo,(,HDC,hdc,/设备句柄,int,nXEnd,/终点的x坐标,int,nYEnd,/终点的y坐标,);,GDI基本图形直线,BOOL Rectangle,(,HDC,hdc,/设备句柄,int,nLeftRect,/包围矩形的左上角x坐标,int,nTopRect,/包围矩形的左上角x坐标,int,nRightRect,/包围矩形的右下角x坐标,int,nBottomRect,/包围矩形的右下角y坐标,);,GDI基本图形矩形,BOOL RoundRect,(,HDC,hdc,/设备句柄,int,nLeftRect,/包围矩形的左上角x坐标,int,nTopRect,/包围矩形的左上角y坐标,int,nRightRect,/包围矩形的右下角x坐标,int,nBottomRect,/包围矩形的右下角y坐标,int,nWidth,/用于画圆角的椭圆的宽度,int,nHeight,/用于画圆角的椭圆的高度,);,GDI基本图形圆角矩形,BOOL Ellipse,(,HDC,hdc,/设备句柄,int,nLeftRect,/包围矩形的左上角x坐标,int,nTopRect,/包围矩形的左上角x坐标,int,nRightRect,/包围矩形的右下角x坐标,int,nBottomRect,/包围矩形的右下角y坐标,);,GDI基本图形椭圆,怎样改变绘图时使用的线型以及线条的颜色:,HPEN hPen,oldPen;,hPen=(HPEN)GetStockObject(WHITE_PEN);,oldPen=(HPEN)SelectObject(hdc,hPen);,GID 绘图函数调用;,SelectObject(hdc,oldPen);/恢复原来的画笔,GDI的画笔使用系统画笔,HPEN CreatePen,(,int,fnPenStyle,/线型,int,nWidth,/画笔线宽,以像素为单位,COLORREF,crColor,/画笔颜色,RGB(R,G,B),);,线型可选参数值:,PS_SOLID PS_DASH PS_DOT PS_DASHDOT等,GDI的画笔创建画笔,使用创建的画笔:,HPEN hPen,oldPen;,hPen=CreatePen(PS_DASHDOTDOT,1,RGB(255,0,0);,oldPen=(HPEN)SelectObject(hdc,hPen);,GID 绘图函数调用;,SelectObject(hdc,oldPen);/恢复原来的画笔,DeleteObject(hPen);,GDI的画笔创建画笔,填充区域 当一系列直线或者曲线封闭了一个区域时,该区域可以使用目前GDI画刷对象进行填图。这个画刷可以是实心色彩、图案(可以是一系列的水平、垂直或者对角标记)或者是在区域内垂直或者水平重复的位图图像。,GDI填充区域,函数,图形,Rectangle,直角矩形,Ellipse,椭圆,RoundRect,圆角矩形,Chord,椭圆周上的弧,两端以弦连接,Pie,椭圆上的饼图,Polygon,多边形,PolyPolygon,多个多边形,HBRUSH hBrush,oldBrush;,hBrush=(HBRUSH)GetStockObject(GRAY_BRUSH);,oldBrush=(HBRUSH)SelectObject(hdc,hBrush);,GID 绘图函数调用;,SelectObject(hdc,oldBrush);/恢复原来的画笔,GDI的画刷使用系统画刷,HBRUSH CreateSolidBrush,(COLORREF,crColor,/画刷颜色);,创建一个单颜色的画刷,即填充区域内使用单一指定的颜色填充,HBRUSH CreateHatchBrush,(,int,fnStyle,/线条的图案方式,COLORREF,crColor,/线条颜色,);,fnStyle,可选参数值:,HS_VERTICAL HS_DIAGONAL HS_CROSS 等,GDI的画刷创建画刷,使用创建的画刷:,HBRUSH hBrush,oldBrush;,hBrush=CreateHatbrush(HS_CROSS,RGB(255,0,0);,oldBrush=(HBRUSH)SelectObject(hdc,hBrush);,GID 绘图函数调用;,SelectObject(hdc,oldBrush);/恢复原来的画笔,DeleteObject(hdc,hBrush);,GDI的画刷创建画刷,位图 位图是位的矩形数组,这些位对应于显示设备上的图素,它们是位映像图形的基础工具。位图通常用于在视讯显示器或者打印机上显示复杂(一般都是真实的)图像。位图还可以用于显示必须快速绘制的小图像(诸如图标、鼠标光标以及在应用工具条中出现的按钮等)。GDI支持两种型态的位图旧式的(虽然还非常有用)设备相关位图,是GDI对象;和新的(如Windows 3.0的)设备无关位图(或者DIB),可以储存在磁盘文件中。,文字文字的数学味道不像计算机图形的其它方面那样浓。文字和几百年的传统印刷术有关,它被许多印刷工人看作为一门艺术。因此,文字通常不仅是所有的计算机图形系统中最复杂的部分,而且(如果识字还是社会基本要求的话)也是最重要的部分。用于定义GDI字体对象和取得字体信息的数据结构是Windows中最庞大的部分之一。从Windows 3.1开始,GDI开始支持TrueType字体,该字体是在填入轮廓线基础上建立的,这样的填入轮廓线可由其它GDI函数处理。依据兼容性和储存大小的考虑,Windows 98继续支持旧式的点阵字体。我会在,第十七章,讨论字体。,GDI基本图形,映像模式和变换 虽然内定以图素为单位进行绘图,但是您并非局限于此。GDI映像模式允许您以英寸(或者甚至以几分之一英寸)、毫米或者任何您想使用的单位来绘图(Windows NT还支持传统的以三乘三矩阵表示的坐标变换,这允许倾斜和旋转图形对象。,MetafileMetafile是以二进制形式储存的GDI命令集合。Metafile主要用于通过剪贴板传输向量图形。,第十八章,会讨论metafile。,绘图区域 绘图区域是形状任意的复杂区域,通常定义为较简单的绘图区域组合。在GDI内部,绘图区域除了储存为最初用来定义绘图区域的线条组合以外,还以一系列扫描线的形式储存。您可以将绘图区域用于绘制轮廓、填入图形和剪裁。,GDI其他部分,
展开阅读全文