Windows绘图程序设计

Windows绘图程序设计

ID:39339372

大小:1.18 MB

页数:111页

时间:2019-07-01

Windows绘图程序设计_第1页
Windows绘图程序设计_第2页
Windows绘图程序设计_第3页
Windows绘图程序设计_第4页
Windows绘图程序设计_第5页
资源描述:

《Windows绘图程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第5章Windows绘图程序设计在编写Windows应用程序过程中,加载位图或者创建位图是程序员常用的方法。只有熟练地掌握对于位图的有关操作方法,才能编写出标准且美观的应用程序。本章主要介绍Windows绘图程序有关的知识,并对绘图所需要的类进行充分讲解。通过本章的学习,读者可以掌握各种图形的绘制及图像在窗口中的一些操作。图形设备接口5.1设备上下文5.2GDI对象5.3绘图函数5.4画笔与画刷5.55.1图形设备接口在MS-DOS程序中,通常采用直接向视频存储区或打印机端口输送数据的方式。但采用这种方式需要各种显示卡或打印机驱动程序。为了支持这些设备

2、,又需要编写大量不同的代码来包含这些驱动程序。为了避免上述问题,Windows提供了一个抽象的接口—图形设备接口(GraphicsDeviceInterface,GDI)。5.2设备上下文设备上下文(DeviceContext,DC)。设备上下文是一种包含有关某个设备(如显示器或打印机)的绘制属性信息的Windows数据结构。下面对设备上下文进行详细介绍。5.2.1设备上下文介绍在Windows应用程序设计中,所有绘制调用都通过设备上下文对象进行,这些对象封装了用于绘制线条、形状和文本的WindowsAPI。设备上下文允许在Windows中进行与设备无

3、关的绘制。设备上下文可用于绘制到屏幕、打印机或者图元文件。在Windows应用程序中,每个窗口都关联有设备上下文。用户只要获取到窗口的设备上下文,就可以在窗口中绘制各种图形图像等信息。获取窗口设备上下文的函数是GetDC(),该函数的原型如下:HDCGetDC(HWNDhWnd);图5.1程序sample0501的运行结果5.2.2设备上下文类型1.显示设备上下文2.打印机设备上下文3.内存设备上下文4.信息设备上下文5.2.3设备上下文MFC类在MFC中,为了方便用户绘图,提供了一个设备上下文类——CDC。CDC类封装了绘图所需要的所有成员函数,以及

4、各种类型的Windows设备上下文的全部功能。此外,CDC还提供了几个派生类,如图5.2所示。1.CDC类在CDC类中存在两个成员变量,m_hDC和m_hAttribDC。这两个成员变量都是Windows设备上下文句柄。CDC对象使用m_hDC对其所有的成员函数作输出调用,而使用m_hAttribDC对其所有的成员函数作属性调用。CDC类的构造函数原型如下:图5.2设备上下文MFC类CDC::CDC(){m_hDC=NULL;m_hAttribDC=NULL;m_bPrinting=FALSE;}CDC::~CDC(){if(m_hDC!=NULL):

5、:DeleteDC(Detach());}2.CPaintDC类在Windows应用程序中,通常在绘制图像之前调用函数BeginPaint(),然后在设备上下文中进行一系列的绘制操作,最后调用EndPaint函数结束绘制。在MFC中,CPaintDC类完全封装了这一过程,其机制是这样的:在构造CPaintDC对象的同时,其构造函数自动调用BeginPaint()函数;在销毁CPaintDC对象的同时,其析构函数自动调用EndPaint()函数。因此整个过程可以简化如下:构造CDC对象,执行绘制操作,最终销毁CDC对象。CPaintDC类是所有CDC类中

6、最常用的一个类,该类代表了应用程序窗口的客户区,其只能运行在CView类中的OnDraw()函数中。OnDraw()函数的原型如下:voidCView::OnDraw(CDC*pDC){CDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);}3.CClientDC类与CPaintDC类一样,CClientDC类所封装的设备上下文仅代表一个窗口的客户区。但与CPaintDC类不同的是,CPaintDC类的对象只能在视图类的OnDraw()函数中使用,而CClientDC类的对象可以在除了OnDraw()函数之外的任何地方使

7、用。图5.3程序sample0502的运行结果图5.4弹出式菜单图5.5添加单击消息图5.6程序sample0503的运行结果4.CWindowDC类CWindowDC类所封装的设备上下文表示的是整个窗口,即不仅包括其客户区,同时也包括窗口的边框及标题栏等其他非客户区对象。其构造函数如下:CWindowDC::CWindowDC(CWnd*pWnd){ASSERT(pWnd==NULL

8、

9、::IsWindow(pWnd->m_hWnd));if(!Attach(::GetWindowDC(m_hWnd=pWnd->GetSafeHwnd())))Afx

10、ThrowResourceException();}5.CMetaFileDC类在应用程序中,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。