资源描述:
《windows图形接口与绘图.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、§3Windows图形设备接口及绘图1.响应WM_PAINT消息2.图形设备接口(GDI)3.使用设备描述表3.获取设备描述表句柄5.CDC及其派生类6.使用CDC成员函数绘制文本7.使用CDC成员函数绘制图形8.正确使用GDI对象9.设备坐标与逻辑坐标10.OpenGL绘图实验作业习题2,3,4WM_PAINT消息的产生无效矩形打开一个窗口改变窗口大小移动窗口切换窗口最小化、最大化窗口调用InvalidateRect函数调用UpdateWindow函数2.响应WM_PAINT消息OnPaint§3.1响
2、应WM_PAINT消息§3.2图形设备接口(GDI)1.图形设备接口—提供专门的数据结构即设备描述表(DC)和对DC操作的绘图函数。2.设备描述表(DC)—用于代表图形输出设备如显示屏、打印机;3.设备无关性—利用GDI,所有的绘图操作都对设备描述表而不是具体的物理设备。设备描述表一种专门用于代表图形输出设备(如屏幕、打印机和绘图仪等)的数据结构画布绘图工具(设备描述表属性)使用句柄(HDC)访问设备描述表设置设备描述表属性绘制图形和文本设备描述表属性GDI对象画笔画刷字体位图裁剪区caseWM_PAIN
3、T:hdc=BeginPaint(hWnd,&ps);RECTrt;GetClientRect(hWnd,&rt);SetTextColor(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.B
4、eginPaint和EndPaint函数(1)BeginPaintfunction准备在窗口绘图获得代表窗口的设备描述表句柄把有关绘图的信息放到PAINTSTRUCT结构变量中。响应WM_PAINT消息绘图,必须调用该函数获取设备描述表句柄。3.4获取窗口设备描述表句柄HDCBeginPaint(HWNDhwnd,//handletowindowLPPAINTSTRUCTlpPaint//pointertostructureforpaintinformation);函数原型:PAINTSTRUCTtype
5、defstructtagPAINTSTRUCT{HDChdc;BOOLfErase;RECTrcPaint;BOOLfRestore;BOOLfIncUpdate;BYTErgbReserved[32];}PAINTSTRUCT标志对指定窗口的绘图结束释放设备描述表句柄必须与BeginPaint函数成对调用函数原型BOOLEndPaint(HWNDhWnd,CONSTPAINTSTRUCT*lpPaint);(2)EndPaintfunction2.GetDC和RealeaseDC函数(1)GetDCfu
6、nction获取窗口设备描述表句柄用于响应非WM_PAINT消息绘图。函数原型:HDCGetDC(HWNDhWnd);(2)ReleaseDCfunction释放设备描述表句柄必须与GetDC函数成对调用函数原型:intReleaseDC(HWNDhWnd,//handletowindowHDChDC//handletodevicecontext);3.5CDC及其派生类CDC:封装了所有与设备描述表有关的数据和操作。绘图函数:Ellipse()…文本输出:TextOut()…设置设备描述表属性:Sele
7、ctObject(),SetTextColor()…数据成员m_hdc:设备描述表句柄。CPaintDC:constructionCWnd::BeginPaintdestructionCWnd::EndPaintCClientDC:constructionCWnd::GetDCdestructionCWnd::ReleaseDCCWindowDCGetWindowDCReleaseDC3.6GDI对象与CGDIObject类GDI对象与句柄使用GDI对象使用CGDIObject类GDI对象与句柄使用GDI
8、对象基本规则(1)创建对象(2)用SelectObject函数把新创建的对象选入设备描述表,并保留原对象(3)完成绘图函数的调用后,把旧对象选入设备描述表,置换出创建的对象(4)删除创建的对象,由DeleteObject函数完成caseWM_PAINT:hdc=BeginPaint(hWnd,&ps);HPENhNewPen,hOldPen;hNewPen=CreatePen(PS_DASH,1,RGB(255,0,0));h