收藏 分享(赏)

图形设备接口及绘图.ppt

上传人:yjrm16270 文档编号:6910080 上传时间:2019-04-27 格式:PPT 页数:66 大小:305.50KB
下载 相关 举报
图形设备接口及绘图.ppt_第1页
第1页 / 共66页
图形设备接口及绘图.ppt_第2页
第2页 / 共66页
图形设备接口及绘图.ppt_第3页
第3页 / 共66页
图形设备接口及绘图.ppt_第4页
第4页 / 共66页
图形设备接口及绘图.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

1、3 Windows 图形设备接口及绘图,1. 响应WM_PAINT消息 2. 图形设备接口(GDI) 3. 使用设备描述表 3. 获取设备描述表句柄 5. CDC及其派生类 6. 使用CDC成员函数绘制文本 7.使用CDC成员函数绘制图形 8.正确使用GDI对象 9.设备坐标与逻辑坐标 10. OpenGL绘图,实验作业,习题2,3,4,WM_PAINT消息的产生无效矩形打开一个窗口 改变窗口大小 移动窗口 切换窗口 最小化、最大化窗口 调用InvalidateRect函数 调用UpdateWindow函数,2. 响应WM_PAINT消息OnPaint,3.1 响应WM_PAINT消息,3.2

2、 图形设备接口(GDI),1 图形设备接口提供专门的数据结构即设备描述表(DC)和对DC操作的绘图函数。2 设备描述表(DC)用于代表图形输出设备如显示屏、打印机;3 设备无关性利用GDI,所有的绘图操作都对设备描述表而不是具体的物理设备。,设备描述表,一种专门用于代表图形输出设备(如屏幕、打印机和绘图仪等)的数据结构 画布 绘图工具(设备描述表属性) 使用句柄(HDC)访问设备描述表 设置设备描述表属性绘制图形和文本,设备描述表属性,GDI对象,画笔 画刷 字体 位图 裁剪区,case WM_PAINT:hdc = BeginPaint(hWnd, ,(1) 获取设备描述表句柄 (2) 设置

3、设备描述表属性 (3) 调用绘图函数绘图 (4) 释放设备描述表,3.3 使用设备描述表绘图,1. BeginPaint和EndPaint函数(1) BeginPaint function 准备在窗口绘图 获得代表窗口的设备描述表句柄 把有关绘图的信息放到PAINTSTRUCT 结构变量中。 响应WM_PAINT消息绘图,必须调用该函数获取设备描述表句柄。,3.4 获取窗口设备描述表句柄,HDC BeginPaint ( HWND hwnd, / handle to window LPPAINTSTRUCT lpPaint/ pointer to structure for paint inf

4、ormation);,函数原型:,PAINTSTRUCT typedef struct tagPAINTSTRUCT HDC hdc; BOOL fErase; RECT rcPaint; BOOL fRestore; BOOL fIncUpdate; BYTE rgbReserved32; PAINTSTRUCT,标志对指定窗口的绘图结束 释放设备描述表句柄 必须与BeginPaint函数成对调用 函数原型,BOOL EndPaint (HWND hWnd, CONST PAINTSTRUCT *lpPaint );,(2) EndPaint function,2.GetDC和Realeas

5、eDC函数,(1) GetDC function 获取窗口设备描述表句柄 用于响应非WM_PAINT消息绘图。 函数原型: HDC GetDC( HWND hWnd );,(2)ReleaseDC function 释放设备描述表句柄 必须与GetDC函数成对调用 函数原型: int ReleaseDC(HWND hWnd, / handle to window HDC hDC / handle to device context );,3.5 CDC及其派生类 CDC: 封装了所有与设备描述表有关的数据和操作。绘图函数:Ellipse()文本输出:TextOut()设置设备描述表属性:Sel

6、ectObject(), SetTextColor()数据成员m_hdc:设备描述表句柄。,CPaintDC:construction CWnd:BeginPaintdestruction CWnd:EndPaint CClientDC :construction CWnd:GetDCdestruction CWnd:ReleaseDC CWindowDC GetWindowDC ReleaseDC,3.6 GDI对象与CGDIObject类,GDI对象与句柄 使用GDI对象 使用CGDIObject类,GDI对象与句柄,使用GDI对象基本规则(1) 创建对象 (2) 用SelectObjec

7、t函数把新创建的对象选入设备描述表,并保留原对象(3) 完成绘图函数的调用后,把旧对象选入设备描述表,置换出创建的对象(4) 删除创建的对象,由 DeleteObject函数完成,case WM_PAINT:hdc = BeginPaint(hWnd, ,使用CGDIObject类,数据成员m_hObject Attach函数 Detach函数 派生类: CPen、CBrush、CFont、CBitmap、CPallete和CRgn类,逻辑坐标系 TextOut(hdc, x,y,szBuffer,nLength) 设备坐标系屏幕坐标系窗口坐标系窗口工作区坐标系 视口(设备坐标)与窗口(逻辑坐

8、标),3.7设备坐标与逻辑坐标,映像模式定义了逻辑坐标与设备坐标的转换CDC: SetMapMode();,窗口原点和视口原点 调整逻辑坐标的原点 窗口限度和视口限度 调整逻辑坐标轴的方向和单位 逻辑坐标与设备坐标的转换公式 xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrg;yViewport=(yWindow-yWinOrg)*(yViewExt/yWinExt)+xViewOrg;,设置逻辑坐标系的原点 SetViewportOrgEx函数 BOOL SetViewportOrgEx(HDC hdc, / 设备描述表句柄int

9、X, / 使用设备单位,视口原点的X坐标值int Y, / 使用设备单位,视口原点的Y坐标值LPPOINT lpPoint / 指向POINT结构变量,存放原始的视口原点坐标); SetViewportOrgEx(hdc,cx/2,cy/2,NULL);,SetWindowOrgEx BOOL SetWindowOrgEx(HDC hdc, / 设备描述表句柄int X, / 使用逻辑单位,窗口原点的X坐标值int Y, / 使用逻辑单位,窗口原点的Y坐标值LPPOINT lpPoint / 指向POINT结构变量,存放原始的窗口原点坐标) SetWindowOrgEx(hdc,-cx/2,-

10、cy/2,NULL);,1.设置映射方式MM_ANISOTROPIC,MM_ISOTROPIC(做适当调整) 2. 设置窗口限度,SetWindowExt() BOOL SetWindowExtEx(HDC hdc, / 设备描述表句柄int nXExtent, / 新设置的水平方向窗口限度int nYExtent, / 新设置的垂直方向窗口限度LPSIZE lpSize / 原始窗口限度 );,任意逻辑坐标系的设置,3.设置视口限度 BOOL SetViewportExtEx(HDC hdc, / 设备描述表句柄int nXExtent, / 新设置的水平方向视口限度int nYExtent

11、, / 新设置的垂直方向视口限度LPSIZE lpSize / 原始视口限度 );,坐标系的转换,DPToLP() LPToDP() ClientToScreen() ScreenToClient(),3.8 使用CDC类绘制图形,绘制点和线 COLORREF SetPixel( POINT point, COLORREF crColor );CPoint MoveTo( POINT point ); BOOL LineTo( POINT point );BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); BOOL AngleArc(

12、 int x, int y, int nRadius, float fStartAngle, float fSweepAngle );,BOOL Polyline( LPPOINT lpPoints, int nCount );BOOL PolyPolyline( const POINT* lpPoints, const DWORD* lpPolyPoints, int nCount );BOOL PolyBezier( const POINT* lpPoints, int nCount );,绘制封闭图形 BOOL Ellipse( LPCRECT lpRect ); BOOL Rectan

13、gle( LPCRECT lpRect ) BOOL RoundRect( LPCRECT lpRect, POINT point ); BOOL Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); BOOL Polygon( LPPOINT lpPoints, int nCount ); BOOL PolyPolygon( LPPOINT lpPoints, LPINT lpPolyCounts, int nCount );,CPen类和画笔,(1)调用带参数的构造函数创建GDI画笔对象,例如:Cpen m_Pen (PS_SOLID,1,R

14、GB(0,0,255);(2)先调用缺省构造函数创建CPen对象,然后调用Indirect函数创建GDI画笔对象,例如:Cpen m_Pen;LOGPEN logpen;logpen .lopnStyle=PS_SOLID; /画笔样式logpen .lopnWidth=1; /画笔宽度logpen .lopnColor=RGB(0,0,255);m_Pen. CreatePenIndirect(,1 画刷和CBrush类,LOGBRUSH的结构定义如下: typedef struct tagLOGBRUSH / lb UINT lbStyle; COLORREF lbColor; LONG

15、lbHatch; LOGBRUSH;,阴影线的样式:,(1)创建实心画刷 使用带参数的构造函数创建 CBrush brush(RGB(255,0,0);先使用缺省的构造函数创建Cbrush对象,然后调用成员函数创建画刷 CBrush brush;brush.CreateSolidBrush(RGB(255,0,0),(2) 创建阴影线画刷 使用带参数的构造函数创建,例如: CBrush brush(HS_DIAGCROSS,RGB(0,255,0);先使用缺省的构造函数创建Cbrush对象,然后调用成员函数创建画刷。如: CBrush brush; brush.CresteHatchBrush

16、(HS_DIAGCROSS,RGB(0,255,0);,(3)创建位图画刷 准备一个位图对象 CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); 使用CBrush类带参数的构造函数创建位图画刷,例如: CBrush brush(,1TextOut 2DrawText-在指定矩形区域以一定格式输出字符串DT_BOTTOM DT_CENTER DT_LEFT DT_RIGHT DT_SINGLELINE DT_TOP DT_VCENTER ,3.9 使用CDC成员函数绘制文本,文本输出函数,3. ExtTextOut 函数功能:在指定位置输出字符串,并且

17、在文本周围给矩形填充背景色。 函数原型:BOOL ExtTextOut( int x, int y, UINT nOptions, LPCRECT lpRect, const CString,void CChildView:OnPaint() CPaintDC dc(this); / device context for paintingdc.SetBkColor(RGB(0,255,0);CRect rect(0,0,200,40);int array5=40,25,35,45,15;dc.ExtTextOut(10,10,ETO_CLIPPED|ETO_OPAQUE, ,4.TabbedT

18、extOut函数 函数功能:和TextOut()的差不多,只是它支持制表符,定义一组制表符的位置。 函数原型:CSize TabbedTextOut( int x, int y, const CString,void CChildView:OnPaint() CPaintDC dc(this); / device context for paintingint array3=80,140,200;dc.TabbedTextOut(0,0,CString(“hellothowtaretyou“),0,NULL,0);dc.TextOut(0,180,CString(“hellothowtaret

19、you“); ,1. SetTextAlign TA_BASELINE TA_BOTTOM TA_TOP TA_CENTER TA_LEFT TA_RIGHT ,文本格式控制,2. SetTextCharacterExtra 函数功能:设置字符间距 函数原型:int SetTextCharacterExtra( int nCharExtra ); 参数说明:nCharExtra为添加的空白数(逻辑单位),3. SetTextJustification 函数功能: 设置词间距 函数原型:int SetTextJustification( int nBreakExtra, int nBreakCo

20、unt ); 参数说明:nBreakExtra 为所有空格添加的空白数(逻辑单位); nBreakCount 为一行字符串中的空格数。,GetTextExtent函数 函数原型:CSize GetTextExtent( const CString& str ) 函数功能: 返回输出字符串str所占用的显示空间(逻辑单位),void CChildView:OnPaint() CPaintDC dc(this); dc.SetTextAlign(TA_RIGHT);dc.TextOut(100,20,CString(“right aligned“);dc.SetTextAlign(TA_LEFT)

21、;dc.TextOut(100,60,CString(“left aligned“);int oldextra=dc.SetTextCharacterExtra(5);dc.TextOut(100,100,CString(“left aligned and add 5 extra“);,CSize size=dc.GetTextExtent(CString(“left aligned and add 5 extra and justified“);CRect rect;GetClientRect( ,3.6.3 获取文本尺寸,1.GetTextMetrics 2.GetTextExtentPo

22、int,typedef struct tagTEXTMETRIC LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; TEXTMETRIC;,设置字符和背景颜色,(1)SetTextColor函数 (2)SetBKColor函数,CFont类与字体,Windows字体 栅格型(Raster) 矢量型(Vector) TrueType 字体要素 字型

23、(字体名称) 字型样式(字体样式) 大小(从低端到顶端的距离),获取字体尺寸信息,GetTextMetrics函数BOOL GetTextMetrics (LPTEXTMETRIC lptm ),typedef struct tagTEXTMETRIC int tmHeight; int tmAscent; int tmDescent; int tmInternalLeading; int tmExternalLeading; int tmAveCharWidth; int tmMaxCharWidth; int tmWeight;,BYTE tmItalic; BYTE tmUnderlin

24、ed; BYTE tmStruckOut; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmPitchAndFamily; BYTE tmCharSet; int tmOverhang; int tmDigitizedAspectX; int tmDigitizedAspectY; TEXTMETRIC;,使用CFont类创建字体,构造CFont对象 调用成员函数创建字体对象 CreateFontIndirect函数 函数原型:BOOL CreateFontIndirect(cons

25、t LOGFONT* lpLogFont ); 参数说明:lpLogFont就是LOGFONT的指针类型。,(2)CreateFont函数 函数原型:BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFa

26、mily, LPCTSTR lpszFacename );,(3)CreatePointFont函数 函数原型:BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL );,void CChildView:OnPaint() CPaintDC dc(this);CString fontname5=“宋体”,”隶书”,”仿宋体”,”楷书”,”黑体”;LOGFONT flog;ZeroMemory( ,本章重点及编程要求:,1 绘图的基本步骤 2 设备环境的获取与使用 3 GDI对象的使用 5 逻辑坐标的设 置,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 图形图像

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报