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

下载本文档

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

文档简介

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音讯 OnPaint3.1 呼应WM_PAINT音讯.3.2 图形设备接口(GDI) 1

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

3、lor(hdc,RGB(255,0,0);SetBkColor(hdc,RGB(0,0,255);DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);EndPaint(hWnd, &ps);break;.(1) 获取设备描画表句柄(2) 设置设备描画表属性(3)调用绘图函数绘图(4) 释放设备描画表3.3 运用设备描画表绘图. 1. BeginPaint和EndPaint函数 (1) BeginPaint function预备在窗口绘图获得代表窗口的设备描画表句柄把有关绘图的信息放到PAINTSTRUCT 构造变量中。呼应WM_PAI

4、NT音讯绘图,必需调用该函数获取设备描画表句柄。3.4 获取窗口设备描画表句柄.HDC BeginPaint( HWND hwnd, / handle to window LPPAINTSTRUCT lpPaint / pointer to structure for paint information); 函数原型:.PAINTSTRUCT typedef struct tagPAINTSTRUCT HDC hdc; BOOL fErase; RECT rcPaint; BOOL fRestore; BOOL fIncUpdate; BYTE rgbReserved32; PAINTSTRU

5、CT. 标志对指定窗口的绘图终了释放设备描画表句柄必需与BeginPaint函数成对调用函数原型BOOL EndPaint( HWND hWnd, CONST PAINTSTRUCT *lpPaint ); (2) EndPaint function.2.GetDC和RealeaseDC函数1 GetDC function获取窗口设备描画表句柄用于呼应非WM_PAINT音讯绘图。函数原型:HDC GetDC( HWND hWnd ); .2ReleaseDC function 释放设备描画表句柄必需与GetDC函数成对调用函数原型:int ReleaseDC(HWND hWnd, / hand

6、le to window HDC hDC / handle to device context); .3.5 CDC及其派生类CDC: 封装了一切与设备描画表有关的数据和操作。 绘图函数:Ellipse() 文本输出:TextOut() 设置设备描画表属性:SelectObject(), SetTextColor() 数据成员m_hdc:设备描画表句柄。.CPaintDC: construction CWnd:BeginPaint destruction CWnd:EndPaintCClientDC : construction CWnd:GetDC destruction CWnd:Rele

7、aseDCCWindowDC GetWindowDC ReleaseDC.3.6 GDI对象与CGDIObject类GDI对象与句柄运用GDI对象运用CGDIObject类. GDI对象与句柄. 运用GDI对象根本规那么 (1) 创建对象 (2)用SelectObject函数把新创建的对象选入设备描画表,并保管原对象(3)完成绘图函数的调用后,把旧对象选入设备描画表,置换出创建的对象(4) 删除创建的对象,由 DeleteObject函数完成.case WM_PAINT:hdc = BeginPaint(hWnd, &ps);HPEN hNewPen,hOldPen;hNewPen=Creat

8、ePen(PS_DASH,1,RGB(255,0,0);hOldPen=(HPEN)SelectObject(hdc,hNewPen);MoveToEx(hdc,0,0,NULL);LineTo(hdc,100,100);hNewPen=(HPEN)SelectObject(hdc,hOldPen);DeleteObject(hNewPen);EndPaint(hWnd, &ps);break;. 运用CGDIObject类数据成员m_hObjectAttach函数 Detach函数派生类: CPen、CBrush、CFont、CBitmap、CPallete和CRgn类. 逻辑坐标系Text

9、Out(hdc, x,y,szBuffer,nLength)设备坐标系屏幕坐标系 窗口坐标系 窗口任务区坐标系视口设备坐标与窗口逻辑坐标3.7设备坐标与逻辑坐标.映像方式 定义了逻辑坐标与设备坐标的转换 CDC: SetMapMode();.窗口原点和视口原点调整逻辑坐标的原点窗口限制和视口限制调整逻辑坐标轴的方向和单位逻辑坐标与设备坐标的转换公式xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrg; yViewport=(yWindow-yWinOrg)*(yViewExt/yWinExt)+xViewOrg;.设置逻辑坐标系的原点S

10、etViewportOrgEx函数BOOL SetViewportOrgEx( HDC hdc, / 设备描画表句柄 int X, / 运用设备单位,视口原点的X坐标值 int Y, / 运用设备单位,视口原点的Y坐标值 LPPOINT lpPoint / 指向POINT构造变量,存放原始的视口原点坐标 );SetViewportOrgEx(hdc,cx/2,cy/2,NULL);.SetWindowOrgExBOOL SetWindowOrgEx( HDC hdc, / 设备描画表句柄 int X, / 运用逻辑单位,窗口原点的X坐标值 int Y, / 运用逻辑单位,窗口原点的Y坐标值 L

11、PPOINT lpPoint / 指向POINT构造变量,存放原始的窗口原点坐标 )SetWindowOrgEx(hdc,-cx/2,-cy/2,NULL);.1.设置映射方式 MM_ANISOTROPIC,MM_ISOTROPIC做适当调整2. 设置窗口限制SetWindowExt()BOOL SetWindowExtEx( HDC hdc, / 设备描画表句柄 int nXExtent, / 新设置的程度方向窗口限制 int nYExtent, / 新设置的垂直方向窗口限制 LPSIZE lpSize / 原始窗口限制);恣意逻辑坐标系的设置.3.设置视口限制BOOL SetViewpor

12、tExtEx( HDC hdc, / 设备描画表句柄 int nXExtent, / 新设置的程度方向视口限制 int nYExtent, / 新设置的垂直方向视口限制 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

13、( LPCRECT lpRect, POINT ptStart, POINT ptEnd );BOOL AngleArc( 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

14、 nCount );.绘制封锁图形BOOL Ellipse( LPCRECT lpRect );BOOL Rectangle( 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

15、类和画笔.(1)调用带参数的构造函数创建GDI画笔对象,例如: Cpen m_Pen (PS_SOLID,1,RGB(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(&logpen );.1画刷和CBrush类.LOGBRUSH的构造定义如下

16、:typedef struct tagLOGBRUSH / lb UINT lbStyle; COLORREF lbColor; LONG 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);先运用缺省的构造函数创

17、建Cbrush对象,然后调用成员函数创建画刷。如:CBrush brush;brush.CresteHatchBrush(HS_DIAGCROSS,RGB(0,255,0);.3创建位图画刷预备一个位图对象CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP1);运用CBrush类带参数的构造函数创建位图画刷,例如:CBrush brush(&bitmap);先运用缺省的构造函数创建Cbrush对象,然后调用成员函数创建画刷。例如:CBrush brush;brush.CrestePatternBrush(&bitmap); .1TextOut 2DrawTe

18、xt-在指定矩形区域以一定格式输出字符串DT_BOTTOM DT_CENTERDT_LEFT DT_RIGHTDT_SINGLELINEDT_TOPDT_VCENTER 3.9 运用CDC成员函数绘制文本 文本输出函数.3. ExtTextOut函数功能:在指定位置输出字符串,并且在文本周围给矩形填充背风光。函数原型:BOOL ExtTextOut( int x, int y, UINT nOptions, LPCRECT lpRect, const CString& str, LPINT lpDxWidths );.void CChildView:OnPaint() CPaintDC dc(

19、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,&rect,CString(hello),array);.4.TabbedTextOut函数函数功能:和TextOut()的差不多,只是它支持制表符,定义一组制表符的位置。函数原型:CSize TabbedTextOut( int x, int y, const CString& str,

20、 int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin );.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(hellothowtaretyou);.1. SetTextAlignTA_BASELINETA_BOTTOMT

21、A_TOPTA_CENTERTA_LEFTTA_RIGHT 文本格式控制.2. SetTextCharacterExtra函数功能:设置字符间距函数原型:int SetTextCharacterExtra( int nCharExtra );参数阐明:nCharExtra为添加的空白数逻辑单位.3. SetTextJustification函数功能: 设置词间距函数原型:int SetTextJustification( int nBreakExtra, int nBreakCount );参数阐明:nBreakExtra 为一切空格添加的空白数逻辑单位; nBreakCount 为一行字符串

22、中的空格数。.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);dc.TextOut(100,60,CString(left aligned);int oldextra=dc.SetTextCha

23、racterExtra(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(&rect);dc.SetTextJustification(rect.Width()-size.cx,7);dc.TextOut(0,140,CString(left aligned and add 5 extra and justified

24、);dc.SetTextCharacterExtra(oldextra);dc.SetTextJustification(0,0);dc.TextOut(100,180,CString(left aligned);.3.6.3 获取文本尺寸1.GetTextMetrics2.GetTextExtentPoint typedef struct tagTEXTMETRIC LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth;

25、 LONG tmMaxCharWidth; LONG tmWeight; TEXTMETRIC; .设置字符和背景颜色(1)SetTextColor函数(2)SetBKColor函数.CFont类与字体Windows字体栅格型(Raster)矢量型(Vector)TrueType字体要素字型字体称号字型款式字体款式大小从低端到顶端的间隔.获取字体尺寸信息GetTextMetrics函数 BOOL GetTextMetrics LPTEXTMETRIC lptm . typedef struct tagTEXTMETRIC int tmHeight;int tmAscent;int tmDesc

26、ent;int tmInternalLeading;int tmExternalLeading;int tmAveCharWidth;int tmMaxCharWidth;int tmWeight;.BYTE tmItalic;BYTE tmUnderlined;BYTE tmStruckOut;BYTE tmFirstChar;BYTE tmLastChar;BYTE tmDefaultChar;BYTE tmBreakChar;BYTE tmPitchAndFamily;BYTE tmCharSet;int tmOverhang;int tmDigitizedAspectX;int tmDigitizedAspectY; TEXTMETRIC;.运用CFont类创建字体构造CFont对象调用成员函数创建字体对象Crea

温馨提示

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

评论

0/150

提交评论