MFC画线:
1、画线:
1)DrawView.h中:
定义CPoint m_ptOrign;
DrawView.cpp中:
在DrawView的OnLButtonDown消息中, //鼠标按下消息
保存鼠标左键按下的point。 m_ptOrign = point;
在DrawView的OnLButtonUp消息中, //鼠标弹起消息
i)
SDK模式:
HDC hDC;
hDC = ::GetDC(m_hWnd); //此处要用全局的::GetDC,否则默认用CDC的。
MoveToEx(hDC, m_ptOrign.x, m_ptOrign.y, NULL); //MoveToEx。先移到初始点,然后再画线
LineTo(hDC, point.x, point.y);
::ReleaseDC(m_hWnd, hDC); //释放也要用全局::ReleaseDC。
MFC模式:(包含画笔)
CDC *pDC = GetDC();
CPen pen(PS_SOLID, 5, RGB(255,0,0));
CPen *pOldPen = pDC->SelectObject(&pen); //将pen选入设备描述表
pDC->MoveTo(m_ptOrign);
pDC->LineTo(point);
pDC->SelectObject(pOldPen); //返还旧画笔
ReleaseDC(pDC);
CClientDC dc(GetParent()); //CClientDC,继承自CDC,不需要手动GetDC和ReleaseDC,传递this或GetParent()
CPen pen(PS_SOLID, 5, RGB(255,0,0));
CPen *pOldPen = dc.SelectObject(&pen);
dc.MoveTo(m_ptOrign);
dc.LineTo(point);
dc.SelectObject(pOldPen);
CWindowDC dc(GetDesktopWindow()); //CWindowDC继承自CDC,包含客户区和非客户区。GetDesktopWindow()获取桌面
CPen pen(PS_SOLID, 5, RGB(255,0,0));
CPen *pOldPen = dc.SelectObject(&pen);
dc.MoveTo(m_ptOrign);
dc.LineTo(point);
dc.SelectObject(pOldPen);
画刷:
CBrush brush(RGB(255,0,0));
CClientDC dc(this); //CClientDC传递this
dc.FillRect(CRect(m_ptOrign, point), &brush); //FillRect填充
透明画刷:
CClientDC dc(this);
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //创建透明画刷
CBrush *pOld = dc.SelectObject(pBrush);
dc.Rectangle(CRect(m_ptOrign, point)); //画矩形
dc.SelectObject(pOld); //最后返还画刷
2. 实现画笔功能,连续画线
1)在DrawView.h中,添加BOOL m_bDraw;
2)在DrawView.cpp中,
OnLButtonDown消息中:m_bDraw = TRUE;
OnLButtonUp消息中:m_bDraw = FALSE;
OnMouseMove消息中:
CClientDC dc(this);
CPen pen(PS_SOLID, 5, RGB(255,0,0));
CPen *pOldPen = dc.SelectObject(&pen);
if (m_bDraw)
{
dc.MoveTo(m_ptOrign);
dc.LineTo(point);
m_ptOrign = point; //移动点坐标。必需的
}
dc.SelectObject(pOldPen); //返还画笔