GDI和CDC区别



GDI

Graphic Device Interface,图形设备接口

 

CDC

设备环境。

 

GDIDC关系】

在单任务环境如MS-DOS中,应用程序可以自己的做它想做的事情,无论是在屏幕上画一条线,重新编写适配器的调色板,还是转换到另一种图像模式。而在窗口化多任务环境如Windows中,程序则失去了这种自由,因为程序A的输出必须与程序B的输出格开,首先这意味着各程序的输出必须限制在自己的窗口中。GDI()使用单一的机制保证在窗口中画图的个程序遵循这一规则,这种机制我们称之为设备描述表(或者设备环境)。


      
Windows程序在屏幕、打印机或其他输出设备上画图时,它并不是将像素直接输出到设备上,而是将图绘制到由设备描述表(DC)表示的逻辑意义上的"显示平面"上去。设备描述表是Windows内在的一种数据结构,它包含GDI需要的所有关于显示平面情况的描述字段,包括相连的物理设备和各种各样的状态信息。在屏幕上画图之前,Windows程序从GDI获取设备描述表句柄(DeviceContext Handle),每一次调用一个GDI输出函数时它就会把这个句柄传回给GDI。如果没有有效的设备句柄,则GDI不会做任何的绘图动作。通过设备描述表,GDI可确保程序所画的任何图形都能剪贴到屏幕的特定区域。设备描述表在使GDI摆脱设备限制的过程中发挥了重要的作用。获得设备描述表的句柄之后,同一GDI函数可以向多种输出设备上画图。

 

DC示例】

我们想在重绘的时候始终显示一段欢迎语,就应该在OnDraw函数中添加

void CTextView::OnDraw(CDC* pDC)
{
CTextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
                                                 //
这是用的第二种方法,我们看到OnDraw的参数正是CDC对象指针
// pDC->TextOut(200,200,"Lide Only"); //
使用的是封装在CDC类中的TextOut,无需给他传递DC

                                                              //也无需关心m_hWnd的事情,CDC类内部依旧完成了这项工作

// HDC hdc; //依旧使用老方法获取dc
//     hdc = ::GetDC(m_hWnd);
// ::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绘图时,先申请设备环境CDC
再在上面用其他工具绘图

 

 

GDI是一个windows图形函数库,它的作用类似于tc/dos下的graphics库。
CDC是这个函数库里定义的一个数据结构,GDI里面的函数需要用到它。
CDC
里包含了一些相关联的信息。
比如调色板、画笔、刷子等。

 

 

这么说吧,刷子,笔,调色板GDI放在你面前,你手上有个控制器CDC,可以用来控制这些工具,而不必管刷子是刷鞋CBrush的还是刷衣服的,笔CPen是毛笔还是画笔,只要你按下按钮CDC::DrawXX,它们都能帮你实现
这就是CDC控制GDI的设备无关性

 

http://bbs.csdn.net/topics/40257864

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值