您的位置:首页 > 其它

孙鑫老师教学视频学习笔记――单文档中实现画笔及画刷

2009-06-16 16:21 483 查看
首先创建一个单文档的工程,然后在CDrawView类中添加OnLButtonDown和OnLButtonUp事件。
画一条直线的几种方法:
(一) HDC hdc;
hdc=::GetDC(m_hWnd); //从CWin派生的类均有一个与该窗口相关的句柄m_hWnd
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);
(二) CDC *pDC=GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);
(三) CClientDC dc(this); //View类窗口位画线区
//CClientDC dc(GetParent()); //窗口的画线区域为父窗口
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
(四) CWindowDC dc(this); //可以访问整个屏幕区域,包括客户区和非客户区
//CWindowDC dc(GetParent());
//CWindowDC dc(GetDesktopWindow()); //画线区域为整个Windows桌面区域
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
运用画笔画各种颜色的直线:
CPen pen(PS_SOLID,1,RGB(0,255,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);
CBitmap bitmap; //用一个位图来填充矩形区域
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitmap);
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
用DC来画矩形:
//该方法画出的矩形,后面的矩形会覆盖前面的矩形
CClientDC dc(this);
dc.Rectangle(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);
实现像画图工具中的画笔一样,可连续画图:
首先添加OnMouseMove事件,在该事件的相应函数中实现。先定义一个变量BOOL m_bDraw。因为画图
是在鼠标左键按下后开始的,所以在OnLButtonDown事件的相应函数里面赋值m_bDraw=TRUE;而在
OnLButtonUp事件的相应函数中赋值m_bDraw=FALSE.
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(0,255,0)); //创建绿色的画笔
CPen *pOldPen=dc.SelectObject(&pen);
if(m_bDraw==TRUE)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_ptOrigin=point; 更改原始点,以便连续作图
}
dc.SelectObject(pOldPen);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: