关闭

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

420人阅读 评论(0) 收藏 举报

用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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:57797次
    • 积分:1598
    • 等级:
    • 排名:千里之外
    • 原创:103篇
    • 转载:12篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论