windows图形接口与绘图培训资料

上传人:yuzo****123 文档编号:141226277 上传时间:2020-08-05 格式:PPT 页数:66 大小:312KB
返回 下载 相关 举报
windows图形接口与绘图培训资料_第1页
第1页 / 共66页
windows图形接口与绘图培训资料_第2页
第2页 / 共66页
windows图形接口与绘图培训资料_第3页
第3页 / 共66页
windows图形接口与绘图培训资料_第4页
第4页 / 共66页
windows图形接口与绘图培训资料_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《windows图形接口与绘图培训资料》由会员分享,可在线阅读,更多相关《windows图形接口与绘图培训资料(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消息,

2、设备描述表,一种专门用于代表图形输出设备(如屏幕、打印机和绘图仪等)的数据结构 画布 绘图工具(设备描述表属性) 使用句柄(HDC)访问设备描述表 设置设备描述表属性 绘制图形和文本,设备描述表属性,GDI对象,画笔 画刷 字体 位图 裁剪区,case WM_PAINT: hdc = BeginPaint(hWnd, ,(1) 获取设备描述表句柄 (2) 设置设备描述表属性 (3)调用绘图函数绘图 (4) 释放设备描述表,3.3 使用设备描述表绘图,1. BeginPaint和EndPaint函数 (1) BeginPaint function 准备在窗口绘图 获得代表窗口的设备描述表句柄 把

3、有关绘图的信息放到PAINTSTRUCT 结构变量中。 响应WM_PAINT消息绘图,必须调用该函数获取设备描述表句柄。,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 fIn

4、cUpdate; BYTE rgbReserved32; PAINTSTRUCT,标志对指定窗口的绘图结束 释放设备描述表句柄 必须与BeginPaint函数成对调用 函数原型,BOOL EndPaint ( HWND hWnd, CONST PAINTSTRUCT *lpPaint );,(2) EndPaint function,2.GetDC和RealeaseDC函数,(1) GetDC function 获取窗口设备描述表句柄 用于响应非WM_PAINT消息绘图。 函数原型: HDC GetDC( HWND hWnd );,(2)ReleaseDC function 释放设备描述表句柄

5、 必须与GetDC函数成对调用 函数原型: int ReleaseDC(HWND hWnd, / handle to window HDC hDC / handle to device context);,3.5 CDC及其派生类 CDC: 封装了所有与设备描述表有关的数据和操作。 绘图函数:Ellipse() 文本输出:TextOut() 设置设备描述表属性:SelectObject(), SetTextColor() 数据成员m_hdc:设备描述表句柄。,CPaintDC: construction CWnd:BeginPaint destruction CWnd:EndPaint CCl

6、ientDC : construction CWnd:GetDC destruction CWnd:ReleaseDC CWindowDC GetWindowDC ReleaseDC,3.6 GDI对象与CGDIObject类,GDI对象与句柄 使用GDI对象 使用CGDIObject类,GDI对象与句柄,使用GDI对象基本规则 (1) 创建对象 (2)用SelectObject函数把新创建的对象选入设备描述表,并保留原对象 (3)完成绘图函数的调用后,把旧对象选入设备描述表,置换出创建的对象 (4) 删除创建的对象,由 DeleteObject函数完成,case WM_PAINT: hdc

7、= BeginPaint(hWnd, ,使用CGDIObject类,数据成员m_hObject Attach函数 Detach函数 派生类: CPen、CBrush、CFont、CBitmap、CPallete和CRgn类,逻辑坐标系 TextOut(hdc, x,y,szBuffer,nLength) 设备坐标系 屏幕坐标系 窗口坐标系 窗口工作区坐标系 视口(设备坐标)与窗口(逻辑坐标),3.7设备坐标与逻辑坐标,映像模式 定义了逻辑坐标与设备坐标的转换 CDC: SetMapMode();,窗口原点和视口原点 调整逻辑坐标的原点 窗口限度和视口限度 调整逻辑坐标轴的方向和单位 逻辑坐标与

8、设备坐标的转换公式 xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrg; yViewport=(yWindow-yWinOrg)*(yViewExt/yWinExt)+xViewOrg;,设置逻辑坐标系的原点 SetViewportOrgEx函数 BOOL SetViewportOrgEx( HDC hdc, / 设备描述表句柄 int X, / 使用设备单位,视口原点的X坐标值 int Y, / 使用设备单位,视口原点的Y坐标值 LPPOINT lpPoint / 指向POINT结构变量,存放原始的视口原点坐标 ); SetView

9、portOrgEx(hdc,cx/2,cy/2,NULL);,SetWindowOrgEx BOOL SetWindowOrgEx( HDC hdc, / 设备描述表句柄 int X, / 使用逻辑单位,窗口原点的X坐标值 int Y, / 使用逻辑单位,窗口原点的Y坐标值 LPPOINT lpPoint / 指向POINT结构变量,存放原始的窗口原点坐标 ) SetWindowOrgEx(hdc,-cx/2,-cy/2,NULL);,1.设置映射方式 MM_ANISOTROPIC,MM_ISOTROPIC(做适当调整) 2. 设置窗口限度,SetWindowExt() BOOL SetWin

10、dowExtEx( HDC hdc, / 设备描述表句柄 int nXExtent, / 新设置的水平方向窗口限度 int nYExtent, / 新设置的垂直方向窗口限度 LPSIZE lpSize / 原始窗口限度 );,任意逻辑坐标系的设置,3.设置视口限度 BOOL SetViewportExtEx( HDC hdc, / 设备描述表句柄 int nXExtent, / 新设置的水平方向视口限度 int nYExtent, / 新设置的垂直方向视口限度 LPSIZE lpSize / 原始视口限度 );,坐标系的转换,DPToLP() LPToDP() ClientToScreen()

11、 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( int x, int y, int nRadius, float fStartAngle, float fSweepAngle );,BOOL Polyline

12、( 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 Rectangle( LPCRECT lpRect ) BOOL RoundRect( LPCRECT lpRect, POINT point ); BOOL Pie(

13、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,RGB(0,0,255); (2)先调用缺省构造函数创建CPen对象,然后调用Indirect函数创建GDI画笔对象,例如: Cpen m_Pen; LOGP

14、EN 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 lbHatch; LOGBRUSH;,阴影线的样式:,(1)创建实心画刷 使用带参数的构造函数创建 CBrush brush(RGB(255,0

15、,0); 先使用缺省的构造函数创建Cbrush对象,然后调用成员函数创建画刷 CBrush brush; brush.CreateSolidBrush(RGB(255,0,0),(2)创建阴影线画刷 使用带参数的构造函数创建,例如: CBrush brush(HS_DIAGCROSS,RGB(0,255,0); 先使用缺省的构造函数创建Cbrush对象,然后调用成员函数创建画刷。如: CBrush brush; brush.CresteHatchBrush(HS_DIAGCROSS,RGB(0,255,0);,(3)创建位图画刷 准备一个位图对象 CBitmap bitmap; bitmap.

16、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 函数功能:在指定位置输出字符串,并且在文本周围给矩形填充背景色。 函数原型:BOOL ExtTextOut( int x, int y, UINT nOptions, LPCRECT lpRect, const CString,void CChildView:OnPaint() CPaintDC dc(this); / device context for painting dc.SetBkColor

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号