获取DC(设备描述表)的方式

1.API函数获取

HDC hdc;  
hdc=::GetDC(m_hWnd);  
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);  
LineTo(hdc,point.x,point.y);  
::ReleaseDC(m_hWnd,hdc);//必须成对使用  

2.用CDC类成员函数。此时别忘记ReleaseDC

CDC *pDC=GetDC();  
pDC->MoveTo(m_ptOrigin);  
pDC->LineTo(point);  
ReleaseDC(pDC);//必须成对使用  

同样需要成对使用手动释放DC

3.用CClientDC

CClientDC dc(this);  
//CClientDC dc(GetParent());  
dc.MoveTo(m_ptOrigin);  
dc.LineTo(point);//此处不需要ReleaseDC,因为CClientDC会自动释放DC 

CClientDC构造函数传递一个窗口类的对象。其在用完后自动释放DC,不需要显式的调用ReleaseDC()

4.用CWindowDC,用它甚至可以整个屏幕区域画线

CWindowDC dc(this);  
//CWindowDC dc(GetParent());  
/*CWindowDC dc(GetDesktopWindow());//此时可以在整个屏幕上画线。 
dc.MoveTo(m_ptOrigin); 
dc.LineTo(point);*/  
CPen pen(PS_DOT,1,RGB(0,255,0));  
CClientDC dc(this);  
CPen *pOldPen=dc.SelectObject(&pen);  
dc.MoveTo(m_ptOrigin);  
dc.LineTo(point);  
dc.SelectObject(pOldPen);  

同样CWindowDC构造函数也需要传递一个窗口类的对象。与CClientDC的区别是该对象可以访问整个窗口区域,包括框架窗口(菜单栏,工具栏)。而CClientDC只能访问的是客户区。

HDC是DC的句柄,API中的一个类似指针的数据类型。
CDC是MFC的DC的一个类。
CDC等设备上下分类,都含有一个类的成员变量:m_nHdc;即HDC类型的句柄。
CDC及其派生类的继承视图:
      CObject
      public |------CDC
      public |------|------CClientDC
      public |------|------CPaintDC
      public |------|------CWindowDC
      public |------|------CMetaFileDC
      (注意: 除CMetaFileDC以外的三个派生类用于图形绘制.)

http://blog.csdn.net/ucnioa/article/details/20057431?utm_source=jiancool
http://blog.csdn.net/yam_killer/article/details/7661449

你可能感兴趣的:(获取DC(设备描述表)的方式)