设备描述表(DC)

转载 2007年10月09日 15:30:00
Windows 程序在屏幕、打印机或其它设备上画图时,它并不是将像素直接输出到设备上,而是将图绘制到由设备描述表表示的逻辑意义上的"显示平面"上去。设备描述表(DC)是Windows中的一种数据结构,它包含GDI需要的所有关于显示界面情况的描述字段,包括相连的物理设备和各种各样的状态信息。在Windows画图之前,Windows程序从GDI获取设备描述表句柄(HDC),并在每次调用完GDI输出函数后将句柄返回给GDI。本文将对如何获得和释放 HDC以及 CDC及其派生类的使用方法进行演示说明。

下载示例工程 DCDemo 具体说明:

1、按钮 IDC_GETDC_APINULL的函数

void CDCDemoDlg::OnGetdcApinull() 
{
	HDC hDC=::GetDC(NULL);
	::MoveToEx(hDC,0,0,NULL);
	LineTo(hDC,200,20);
	::ReleaseDC(NULL,hDC);
}
  该段代码具体演示了如何使用API 函数GetDC(NULL),取得屏幕的HDC.并进行画图。 HDC GetDC(HWND hWnd); //功能:取得hWnd窗口的设备描述表句柄。当hWnd参数为NULL时,取得整个屏幕的设备描述表句柄。 MoveToEx和LineTo演示在DC上画一条直线记住,最后调用ReleaseDC释放HDC资源。
int  ReleaseDC (
HWND hWnd,//你要控制的那个窗口的句柄,如果你在GetDC函数传递的是NULL,现在还要传递NULL。
HDC hDC //DC的句柄
);
编译运行程序,按下按钮,发现屏幕的左上角处画了一条直线。

2、按钮 IDC_GETDC_API的函数

void CDCDemoDlg::OnGetdcApi() 
{
	HDC hDC=::GetDC(m_hWnd);
	::MoveToEx(hDC,0,0,NULL);
	LineTo(hDC,200,50);
	::ReleaseDC(m_hWnd,hDC);
}
  这段代码与前一段代码唯一的区别是GetDC的参数不再是NULL,而改为CWnd的成员变量m_hWnd,即对话框窗口的句柄。对比两段代码运行结果,深入体会API函数 GetDC。

3、按钮IDC_GETDC_CWND的函数

void CDCDemoDlg::OnGetdcCwnd() 
{
	CDC *pDC=GetDC();
	pDC->MoveTo(0,0);
	pDC->LineTo(200,100);
	ReleaseDC(pDC);
}
  该段代码演示使用MFC CWnd类的 GetDC函数和ReleaseDC的方法,使用该方法在程序窗口中画图非常方便。为了避免获取和释放设备描述表所带来的麻烦,MFC提供了一些CDC派生类,如CPaintDC,CClientDC,CWindowDC,这些类被设计为可直接进行实例化。各个类的构造函数和析构函数调用相应的函数捕获和释放设备描述表,从而使得更加方便简捷。

4、按钮IDC_CCLIENTDC的函数

void CDCDemoDlg::OnCclientdc() 
{
  CClientDC dc(this);
  CBrush brush(RGB(255,0,0));
  dc.FillRect(CRect(0,0,100,100),&brush);
}
  该段代码演示了 CClientDC的具体使用方法,通过测试可以看出和 CClientDC对象相对应的设备描述表是窗口的客户区 。 CPaintDC类是从CDC类派生出来的,在构造时自动调用CWnd::BeginPaint,析构时调用CWnd::EndPaint。通常CPaintDC用来响应WM_PAINT消息,一般应用在OnPaint函数,对窗口的客户区进行操作。

5、按钮IDC_CWINDOWDC的函数

void CDCDemoDlg::OnCwindowdc() 
{
	CWindowDC dc(this);
	CPen pen(PS_SOLID,3,RGB(0,255,0));
	CPen *pOldPen=dc.SelectObject(&pen);
	dc.MoveTo(0,0);
	dc.LineTo(200,200);
	dc.SelectObject(pOldPen);
}
运行并观察画线的起始位置。可以看出CWindowDC对象和整个窗口相对应。

6、按钮IDC_POINTER的函数

void CDCDemoDlg::OnPointer() 
{
	CWindowDC *pDC;
	pDC=new CWindowDC(this);
	pDC->MoveTo(0,0);
	pDC->LineTo(200,250);
	delete pDC;
}
  这段代码演示了如何在堆中创建指向CDC派生类的指针,再利用该指针进行画图,最后请使用delete pDC; 释放指针。就说到这吧,希望能对您有所帮助。

GDI编程 之三、使用DC进行绘图的基本过程

l  获取或者创建设备描述表.DC; l  必要的话,改变设备描述表的属性(见第四节:GDI对象的介绍); l  使用设备描述表完成绘制操作; l  释放或删除设备描述表DC。 ...
  • u011305137
  • u011305137
  • 2014年08月14日 21:57
  • 1210

HID从设备连接电脑获取描述符分析

Bus Hound 6.01 capture on Windows Vista (x64). Complements of www.perisoft.net   Device - Devic...
  • hexiechina2010
  • hexiechina2010
  • 2016年06月03日 08:31
  • 1261

HID报告描述符解析_笔记

要了解报告描述符,需要两份资料:《device class definition for human interface device (HID)》, 《Universal Serial Bus HI...
  • benjamin721
  • benjamin721
  • 2016年04月22日 11:21
  • 2301

MFC之设备描述表DC、画笔Pen、画刷Brush

1.利用SDK全局函数实现画线功能void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) { HDC hdc; hdc=::Ge...
  • u014686875
  • u014686875
  • 2016年10月28日 11:11
  • 664

关于设备描述表(DC)的详解

关于DC(设备描述表)可能有很多疑惑,在这简单进行介绍一下
  • windy_20150214
  • windy_20150214
  • 2017年11月09日 11:29
  • 55

设备描述表DC

Win32下获取DC的API函数有: HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint):特定用于WM_PAINT消息 HDC GetDC(HWND ...
  • qq1712088151
  • qq1712088151
  • 2012年03月09日 17:34
  • 525

设备上下文DC(又称设备描述表)

设备描述表概述 当一个应用程序使用GDI函数时,必须先装入特定的设备驱动程序,然后为绘制窗口准备设备描述表,比如指定线的宽度和颜色、刷子的样式和颜色、字体、剪裁区域等等。不像其他Win32结构,设备描...
  • u014041012
  • u014041012
  • 2015年04月07日 22:55
  • 260

设备描述表和图形对象

  • 2012年05月14日 11:37
  • 16.5MB
  • 下载

设备描述表之映射模式介绍

 映射模式是设备描述表的内容之一,其优点是程序员可不必考虑输出设备的坐标系情况,而在一个统一的逻辑坐标系中组成图形的绘制与操作,映射模式定义了将逻辑单位转化为设备的度量单位以及设备的x方向和y方...
  • liuyanhuasd
  • liuyanhuasd
  • 2016年02月17日 11:20
  • 447

MFC设备描述表中路径层原理

1、路径层的创建是通过启用CDC类提供的BeginPath和EndPath这两个函数实现的。 2、路径层一般都是配合裁剪区域一起使用的,针对当前裁剪区域就行某种形式的保护。 void CMapBi...
  • chuan442616909
  • chuan442616909
  • 2013年08月08日 09:14
  • 684
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设备描述表(DC)
举报原因:
原因补充:

(最多只允许输入30个字)