绘制直线,画笔和画刷操作,绘制矩形,绘制扇形

看了资料,做了点总结,下面详细介绍绘制直线,画笔和画刷操作,绘制矩形,绘制扇形等操作:

需要定义的变量

private:

CPoint m_ptOld;

BOOL m_Draw;

CPoint m_ptOrigin;

\\初始化

CTest1View::CTest1View()

{

m_ptOrigin=m_ptOld=0;

m_Draw=FALSE;

// TODO: add construction code here

}

绘制直线

第一种方法:利用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);

第二种方法:利用CDC

CDC *pDc = GetDC();

pDc->MoveTo(m_ptOrigin);

pDc->LineTo(point);

ReleaseDC(pDc);

第三种方法:利用cclientDc(可以不用调用ReleaseDC,因为会自动调用)

\\CClientDC dc(GetParent()); \\可以获得父窗口的hdc

CClientDC dc(this);

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

第三种方法:利用CWindowDC

\\CWindowDC dc(GetParent());\\能在非客户区域作图

\\CWindowDC dc(GetDesktopWindow());\\能在整个区域作图

CWindowDC dc(this);

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

设置画笔

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

CClientDC dc(this);

CPen *pOldPen = dc.SelectObject(&pen);\\进行转化

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

dc.SelectObject(pOldPen);\\转化回来

设置画刷

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

CClientDC dc(this);

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

设置位图画刷

打开Insert->resource->选择bitmap->新建位图

CBitmap bitMap;

bitMap.LoadBitmap(IDB_BITMAP1);

CBrush brush(&bitMap);

CClientDC dc(this);

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

绘制矩形(所画矩形将会被填充)

CClientDC dc(this);

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

绘制透明矩形

CClientDC dc(this);

CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

CBrush *pOldBrush=dc.SelectObject(pBrush);

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

dc.SelectObject(pOldBrush);

绘制连续的图案

CClientDC dc(this);

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

CPen *pOldPen=dc.SelectObject(&pen);

if(m_Draw==TRUE)

{

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

m_ptOrigin=point;

}

dc.SelectObject(pOldPen);

绘制无边界的扇形

CClientDC dc(this);

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

CPen *pOldPen=dc.SelectObject(&pen);

if(m_Draw==TRUE)

{

dc.MoveTo(m_ptOrigin);

dc.LineTo(m_ptOld);

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

m_ptOld=point;

}

dc.SelectObject(pOldPen);

绘制有边界的扇形

CClientDC dc(this);

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

CPen *pOldPen=dc.SelectObject(&pen);

if(m_Draw==TRUE)

{

dc.MoveTo(m_ptOrigin);

dc.LineTo(m_ptOld);

//dc.MoveTo(m_ptOrigin);

dc.MoveTo(m_ptOld);

dc.LineTo(point);

m_ptOld=point;

}

dc.SelectObject(pOldPen);

扩展:

\\dc.SetROP2(R2_MERGENOTPEN);设置绘画模式

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值