2024年4月5日发(作者:)

VC++中关于DC(设备环境函数(Device Context))的理解

问:设备描述表DC是一个什么概念,谁通俗的说说,先谢了

学习VC,首先遇到的就是这个DC,即设置描述表,输出文字,绘图都要用这个,好象

它太重要了。但是我就是不明白,这是什么东西。

一些教程看了,但还是不太了解,谁能通俗的说说,能快速理解它,谢谢。

答:1、作画之前需要准备好画布、画笔、调色板等。

当使用GDI函数如MoveToEx/LineTo, TextOut时,只是告诉系统要划线或写字了,

但用什么样的笔(HPEN),字是什么颜色(SetTextColor),画在哪张“纸”(HBITMAP)

上需要从一个由系统定义的数据结构中去读取。

这个数据结构被称为Device Context(DC)。

换句话说,GDI函数只是绘画的动作,而DC则保存了绘画所需的材料和工具。

2、设备环境函数(Device Context)

设备环境是一个结构,它定义了一系列图形对象及其相关的属性,以及会影响输出结

果的绘图方式。这些图形对象包括:画笔(用于画直线),笔刷(用于绘图和填充),位图

(用于屏幕的拷贝或滚动),调色板(用于定义可用的颜色集),剪裁区(用于剪裁和其他

操作),路径(用于绘图和画图操作)。设备环境函数用于对设备环境进行创建、删除或获

取信息。

问:DC,CDC,HDC,有什么本质的区别?

答:都是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();

( 0, 0 );

( 0, 100 );

this->ReleaseDC( &dc );

但这样还不够,因为 CDC还要你自己去释放,所有MFC中又多出来一个CClientDC,

这样你就可以这样了: