【GDI】
Graphic Device Interface,图形设备接口
【CDC】
设备环境。
【GDI和DC关系】
在单任务环境如MS-DOS中,应用程序可以自己的做它想做的事情,无论是在屏幕上画一条线,重新编写适配器的调色板,还是转换到另一种图像模式。而在窗口化多任务环境如Windows中,程序则失去了这种自由,因为程序A的输出必须与程序B的输出格开,首先这意味着各程序的输出必须限制在自己的窗口中。GDI()使用单一的机制保证在窗口中画图的个程序遵循这一规则,这种机制我们称之为设备描述表(或者设备环境)。
【DC示例】
我们想在重绘的时候始终显示一段欢迎语,就应该在OnDraw函数中添加
void CTextView::OnDraw(CDC* pDC)
{
CTextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
// pDC->TextOut(200,200,"Lide Only"); //使用的是封装在CDC类中的TextOut,无需给他传递DC
// HDC hdc; //依旧使用老方法获取dc
//
// ::TextOut(hdc,400,400,"Lide Only",9); //使用的是全局函数TextOut
}
http://blog.sina.com.cn/s/blog_4dd60c7a0100jw6i.html
GDI是图形设备接口的意思,包括DC,HBITMAP,HFONT,HPEN,HBRUSH等等。
CDC只是用C++把DC给封装了。
CDC就是设备环境,
GDI中也包括该元素,正如楼上所说的,用GDI绘图时,先申请设备环境,
再在上面用其他工具绘图
GDI是一个windows图形函数库,它的作用类似于tc/dos下的graphics库。
而CDC是这个函数库里定义的一个数据结构,GDI里面的函数需要用到它。
CDC里包含了一些相关联的信息。
比如调色板、画笔、刷子等。
这么说吧,刷子,笔,调色板放在你面前,你手上有个控制器,可以用来控制这些工具,而不必管刷子是刷鞋的还是刷衣服的,笔是毛笔还是画笔,只要你按下按钮,它们都能帮你实现
这就是CDC控制GDI的设备无关性
http://bbs.csdn.net/topics/40257864