关于各种dc的实例简单使用

用win32API画线

 HDC hdc;
 hdc=::GetDC(m_hWnd);
 MoveToEx(hdc,m_pOrigin.x,m_pOrigin.y,NULL);
 LineTo(hdc,point.x,point.y);
 ::ReleaseDC(m_hWnd,hdc);*/

用封装的cdc画线

/* CDC *pdc=GetDC();
 pdc->MoveTo(m_pOrigin);
 pdc->LineTo(point);
 ReleaseDC(pdc);*/

 用cdc派生的CClientDC画线

 CClientDC dc(this);              //dc和view联系

 CClientDC dc(GetParent());   //将dc和frame联系
 dc.MoveTo(m_pOrigin);     

 dc.LineTo(point);

这就不需要我们去调用dc了,在它对象构造析构的时候自动完成
 用cdc派生的CWindowDC 画线

    CWindowDC dc(this);
    CWindowDC dc(GetParent());
    dc.MoveTo(m_pOrigin);    //这也不需要我们去调用dc了
 dc.LineTo(point);

这也不需要我们去调用dc了,在它对象构造析构的时候自动完成

注意,它能访问到整个屏幕,客户区和非客户区(标题栏和菜单)

 CWindowDC dc(GetDesktopWindow());我们就可以画到桌面,主要看

你将dc和哪个窗口联系起来了

 

想画其他颜色的线条,可以创建一个新画笔,然后选到dc中

用cpen类

CPen pen(PS_GEOMETRIC ,1,RGB(0,0,255));    (用后面参数构造一个画笔对象,这都忘了。。。)
 CClientDC dc(this);
 CPen *pOldpen=dc.SelectObject(&pen);

  dc.MoveTo(m_pOrigin);
 dc.LineTo(point);
 dc.SelectObject(pOldpen);
//将现在的画笔选入设备上下文,然后返回一个旧画笔的指针,我们保存起来,用完这个画 笔,再把以前的选回去

 

画刷,填充

 

CBrush brush(RGB(255,0,0));

CClientDC dc(this);

dc.FillRect(CRect(m_pOrigin,point),&brush);

 

 

 

 

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);                //用位图填充

CBrush  brush(&bitmap);

CClientDC dc(this);

dc.FillRect(CRect(m_pOrigin,point),&brush);

 

 

 

 CClientDC dc(this);

   CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//(强制转换)获取空画刷句柄再转为指针

CBrush  *pOldbrush=dc.SelectObject(pBrush);

dc.Rectangle(CRect(m_pOrigin,point));

    dc.SelectObject(pOldbrush);

 

 

fromhandle 从句柄转到指针           

fillrect和rectangle方法是不同的,前者提供一个画刷,所以不用选中画刷,而后者,我们需要创建画刷再选入

 

实现连续划线功能:声明一个bool变量,buttondown为真,buttonup为假,

CClientDC dc(this);

 

if(m_bDraw==TRUE)             //为真的时候,响应鼠标移动这个信息

{

       dc.MoveTo(m_pOrigin);

  dc.LineTo(point);

  m_pOrigin=point;             、、不断地画两点间的小线段,线段尾点是下一段的起点,直到buttonup,不再画

}

 

CClientDC dc(this);

    CPen pen(PS_SOLID ,1,RGB(255,0,0));

CPen *pOldpen=dc.SelectObject(&pen);            //复习填充更换画笔的代码

if(m_bDraw==TRUE)

{

       dc.MoveTo(m_pOrigin);

  dc.LineTo(point);

  m_pOrigin=point;

}

dc.SelectObject(pOldpen);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值