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,
这样你就可以这样了:


发布评论