图形设备接口及绘图.ppt
《图形设备接口及绘图.ppt》由会员分享,可在线阅读,更多相关《图形设备接口及绘图.ppt(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 图形设备接口(GDI),1 图形设备接
2、口提供专门的数据结构即设备描述表(DC)和对DC操作的绘图函数。2 设备描述表(DC)用于代表图形输出设备如显示屏、打印机;3 设备无关性利用GDI,所有的绘图操作都对设备描述表而不是具体的物理设备。,设备描述表,一种专门用于代表图形输出设备(如屏幕、打印机和绘图仪等)的数据结构画布绘图工具(设备描述表属性)使用句柄(HDC)访问设备描述表 设置设备描述表属性 绘制图形和文本,设备描述表属性,GDI对象,画笔画刷字体位图裁剪区,case WM_PAINT:hdc=BeginPaint(hWnd,(1)获取设备描述表句柄(2)设置设备描述表属性(3)调用绘图函数绘图(4)释放设备描述表,3.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 information);,函数原型:,PAINTSTRUCT typedef struct tagP
4、AINTSTRUCT 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和RealeaseDC函数,(1)GetDC function获取窗口设备描述表句柄用于响应非WM_PAINT消息绘图。函数原型:HDC G
5、etDC(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()设置设备描述表属性:SelectObject(),SetTextColor()数据成员m_hdc:设备描述表句柄。,CPaintDC:construction CWnd:BeginPa
6、int destruction CWnd:EndPaintCClientDC:construction CWnd:GetDC destruction CWnd:ReleaseDCCWindowDC GetWindowDC ReleaseDC,3.6 GDI对象与CGDIObject类,GDI对象与句柄使用GDI对象使用CGDIObject类,GDI对象与句柄,使用GDI对象基本规则(1)创建对象(2)用SelectObject函数把新创建的对象选入设备描述表,并保留原对象(3)完成绘图函数的调用后,把旧对象选入设备描述表,置换出创建的对象(4)删除创建的对象,由 DeleteObject函数完
7、成,case WM_PAINT:hdc=BeginPaint(hWnd,使用CGDIObject类,数据成员m_hObjectAttach函数 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结构变量,存放原始的视口原点坐标);SetViewportOrgEx(hd
9、c,cx/2,cy/2,NULL);,SetWindowOrgExBOOL 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 SetWindowExtEx(HDC hdc,/设备描述表句柄 i
10、nt nXExtent,/新设置的水平方向窗口限度 int nYExtent,/新设置的垂直方向窗口限度 LPSIZE lpSize/原始窗口限度);,任意逻辑坐标系的设置,3.设置视口限度BOOL SetViewportExtEx(HDC hdc,/设备描述表句柄 int nXExtent,/新设置的水平方向视口限度 int nYExtent,/新设置的垂直方向视口限度 LPSIZE lpSize/原始视口限度);,坐标系的转换,DPToLP()LPToDP()ClientToScreen()ScreenToClient(),3.8 使用CDC类绘制图形,绘制点和线COLORREF SetP
11、ixel(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(LPPOINT lpPoints,int nCount);BOOL PolyPolyline(const POINT*lpPoints,cons
12、t 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(LPCRECT lpRect,POINT ptStart,POINT ptEnd);BOOL Polygon(LPPOINT lpPoints,int nCount);BOOL PolyPolygon
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形 设备 接口 绘图

链接地址:https://www.31ppt.com/p-6558729.html