MFC获取dc的方式

)API函数方法用HDC

 

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);//必须成对使用

这里获得GetDC()函数需要跟ReleaseDC()函数成对使用

 

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只能访问的是客户区。

 

这里同时可以初步了解一下

 

CPen *pOldPen=dc.SelectObject(&pen);函数,同时注意一下其返回值!

 

这是GDI画图的特点,当给dc执行一次SelectObject,它将返回前一次SelectObject的内容,绘图完毕,执行dc.SelectObject(pOldPen)。

就相当于你在画布上画图,你手里本来默认拿着一只白色的画笔,现在你要画蓝色线条,所以你选了一个蓝色画笔,画图完毕,你还要恢复你手里默认拿着的白色画笔。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值