DC(Device Context),设备上下文或者设备环境。
应用程序的输出面向设备环境(Device Context,DC),是一个虚拟逻辑设备,也称设备描述表或设备上下文。设备环境DC 是由GDI 创建,用来代表设备连接的数据结构。
(Windows提供了一个称为图形设备接口 GDI,用户通过调用GDI 函数与设备打交道,避免了用户对硬件直接进行操作)1、作画之前需要准备好画布、画笔、调色板等。当使用GDI函数如MoveToEx/LineTo, TextOut时,只是告诉系统要划线或写字了,但用什么样的笔(HPEN),字是什么颜色(SetTextColor),画在哪张“纸”(HBITMAP)上,需要从一个由系统定义的数据结构中去读取,这个数据结构被称为Device Context(DC)。 换句话说,GDI函数只是绘画的动作,而DC则保存了绘画所需的材料和工具。
2、设备环境函数(Device Context) 设备环境是一个结构,它定义了一系列图形对象及其相关的属性,以及会影响输出结果的绘图方式。这些图形对象包括:画笔(用于画直线),笔刷(用于绘图和填充),位图(用于屏幕的拷贝或滚动),调色板(用于定义可用的颜色集),剪裁区(用于剪裁和其他操作),路径(用于绘图和画图操作)。设备环境函数用于对设备环境进行创建、删除或获取信息。问:DC,CDC,HDC,CClientDC....有什么本质的区别?
答:都是DC嘛,HDC就是最原始的 DC 句柄,很多API的第一个参数就是一个HDC类型,比如
HDC hDC = ::GetDC( m_hWnd);
::MoveToEx( hDC, 0, 0, NULL );
::LineTo( hDC, 0, 100, );
::ReleaseDC( m_hWnd, hDC );
在MFC中,为了将API封装成一个类来操作,因此多出来了一个CDC。所以在MFC中,都是
CDC dc = GetDC();
dc.MoveTo( 0, 0 );
dc.LineTo( 0, 100 );
this->ReleaseDC( &dc );
但这样还不够,因为 CDC还要你自己去释放,所有MFC中又多出来一个CClientDC,