GDI CDC

http://hi.baidu.com/lanlandejuzi/item/815e9216ee7f6b5af0090ef3


什么是 GDI ?

     GDI全称是Graphics Device Interface(图形设备接口)。它负责Windows中的图形输出。在使用GDI编程时,我们需要一个设备描述表对象。这个对象的基类在MFC中声明为CDC,

   如DrawText()函数即是该类的一个成员函数。MFC提供了若干有用的CDC派生类,如我们已经见到过的CPaintDC类。在绘制图形时,Windows并不是把所有的像素都直接输出到平面上,而是先将这些像素输出到设备描述表中,然后再通过设备描述表来最终向输出设备中绘制图形。


设备描述上下文(设备描述表)

在MFC中获取设备描述上下文的标准方法是使用CWnd::GetDC();方法。在绘制完毕时要使用ReleaseDC()释放该上下文。如下:
CDC* pDC = GetDC();
//使用pDC完成绘制工作
ReleaseDC(pDC);
标准的CDC对象是不能通过定义或new操作符自己创建出来的,必须从系统环境中获取。
如果是在OnPaint()函数中使用设备上下文,则可以使用BeginPaint()和EndPaint()函数。但是这里需要提供一个PAINTSTRUCT类型的参数用于获取系统相关信息。如下:
PAINTSTRUCT ps;
CDC* pDC = BeginPaint(&ps);
//使用pDC完成绘制工作
EndPaint(&ps);

MFC提供了若干个CDC类的派生类,如表所示:
类名                        描述
CPaintDC                用于在窗口客户区画图(仅限于OnPaint处理程序)
CClientDC               用于在窗口客户区画图(除OnPaint外的任何处理程序)
CWindowDC            用于在窗口内任意地方画图,包括非客户区
CMetaFileDC           用于向GDI元文件画图


对于CPaint这些已经被封装好的类,我们在使用时不需再调用ReleaseDC()函数。这些对象在被系统销毁调用其析构函数时即会自动释放设备描述表。对于在函数中定义的普通变量如:
CPaintDC dc(this);
在退出函数时,其所在的栈内存被回收,dc对象的析构函数被调用,所以其设备描述表句柄被释放。
对于CPaintDC之类的指针变量,则需要使用delete操作符将其显示的回收。
如CPaintDC* pDC = new CPaintDC(this);
delete pDC;

CPaintDC 类

CPaintDC类响应WM_PAINT消息,但只能在OnPaint()函数中使用。

CClientDC和CWindowDC类
CClientDC类是用于OnPaint()方法之外的。用法与CPaintDC类似。
CWindowDC类所含的窗口区域包括了窗口边框这内的所有内容。
如果对CClientDC对象或是CWindowDC对象初始化时提供了NULL参数,则会在当前的桌面屏幕上绘制图形。

设备描述上下文属性

们所做的所有绘图工作中并不包括颜色、背景等的操作。这些操作都在设备上下文中被描述,我们可以通过对当前的设备上下文对象设置这些操作,从而完成颜色之类的变化。主要的设备描述上下文属性如下表所示:
属性             默认值                           设值方法                                  取值方法
文本颜色       Black                            CDC::SetTextColor                   CDC::GetTextColor
背景颜色       White                             CDC::SetBkColor                     CDC::GetBkColor
背景模式       OPAQUE                       CDC::SetBkMode                     CDC::GetBkMode
映射模式      MM_TEXT                       CDC::SetMapMode                   CDC::GetMapMode
绘图模式       R2_COPYPEN               CDC::SetROP2                       CDC::GetROP2
当前位置       (0,0)                              CDC::MoveTo                          CDC::GetCurrentPosition
当前画笔       BLACK_PEN                  CDC::SelectObject                   CDC::SelectObject
当前画刷       WHITE_BRUSH             CDC::SelectObject                   CDC::SelectObject
当前字体       SYSTEM_FONT             CDC::SecletObject                   CDC::SelectObject

映射模式

不同的映射模式下一个单位所代表的实际长度是不一样的。在默认的MM_TEXT映射模式下,一个单位恰好表示一个像素,而在MM_LONGENGLISH映射模式下,一个单位代表百分之一英寸。
下表显示了8种不同的映射模式:
映射模式                          一个逻辑单位对应的距离                  X和Y轴的方向
MM_TEXT                       1像素                                              +x,+y
MM_LOMETRIC               0.1mm                                            +x,-y
MM_HIMETRIC                0.01mm                                          +x,-y
MM_LOENGLISH             0.01in                                             +x,-y
MM_HIENGLISH               0.001in                                            +x,-y
MM_TWIPS                    1/1440in(0.0007in)                             +x,-y
MM_ISOTROPIC             用户自定义(x和y同等缩放)            用户自定义
MM_ANISOTROPIC         用户自定义(x和y独立缩放)             用户自定义
使用CDC::SetMapMode可以改变默认的映射模式。

获取设备信息

使用CDC::GetDeviceCaps()函数可以获得系统的设备信息

获得字体信息

GetTextMetrics

用于得到被定义的系统数据或者系统配置信息.

GetSystemMetrics ()


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值