设备上下文,又叫作设备描述表(Device Context),简称DC。
当一个应用程序使用GDI函数时,必须先装入特定的设备驱动程序,然后为绘制窗口准备设备描述表,比如指定线的宽度和颜色、刷子的样式和颜色、字体、剪裁区域等等。不像其他Win32结构,设备描述表不能被直接访问,只能通过系列Win32函数来间接地操作。
如同Windows“窗口类”一样,设备描述表也是一种Windows数据结构,用来描述绘制窗口所需要的信息。它定义了一个坐标映射模式、一组GDI图形对象及其属性。这些GDI对象包括用于画线的笔,绘图、填图的刷子,位图,调色板,剪裁区域,及路径(Path)。
1.设备描述表
设备描述表是一个包含设备信息的结构体,(物理设备如显示器,打印机),MFC中关于图形操作都需要DC来完成.
2获取DC 有两种方式:
(1)在WM_PAINT消息时,使用BeginPaint
eg: HDC hdc;
在其他的场合,都是使用第二种方法来调用DC.
具有特殊类型的DC
| |
---|---|
CPaintDC | 用于在窗口客户区绘图(仅限于OnPaint处理程序) |
CClientDC | 用于在窗口客户区绘图(除OnPaint外的任何处理程序) CClientDC dc(this); dc.MoveTo(m_ptOrigin); dc.LineTo(m_ptEnd); |
CWindowDC | 用于在整个窗口.下面是以桌面为例,应该明确桌面也是一个窗口. CWindowDC dc(GetDesktopWindow()); dc.MoveTo(m_ptOrigin); dc.LineTo(m_ptEnd); |
CMetaFileDC | 用于向GDI元文件绘图 |
这个就保存在元文件中,等待事件然后播放元文件.(如窗口重绘)
3设备描述表相关的工具有:bitmap,font,brush,palette,pen
使用原则:首先创建一个特定的对象,然后将其选入设备描述表中,接下来就一一介绍如何使用.
CClientDC dc(this);
CPen pen(类型,线宽,颜色);(定义一个画笔)
CBrush brush(颜色);(定义一个画刷,主要是填充作用)
CBitmap bitmap;(定义一个位图)
bitmap.LoadBitmap(IDB_BITMAP1);
CFont font;(定义一种字体)
font.CreatePointFont(大小,字体名称,NULL);(NULL 表示使用屏幕设备描述表来完成这中转换)
将他们都选入设备描述表中,并且保存以前的.运用SelectObject()函数,可以将其选入设备描述表,并且返回先前被选对象的指针.
CPen *poldpen=dc.SelectObject(&pen);
使用过程
dc.SelectObject(poldpen);(使用结束后,将其恢复到原来的状态)
CBrush *poldbursh=dc.SelectObject(&bursh);
dc.FillRect(CRect(100,100,200,200),&brush);
dc.SelectObject(poldbrush);
红色背景转自http://blog.sina.com.cn/s/blog_50ed869d01009995.html