您的位置:首页 > 职场人生

【笔试/面试】MFC(五)

2016-04-16 19:45 399 查看

画线

为 View 类增加对 WM_LBUTTONDOWN 以及 WM_LBUTTONUP 的消息响应函数,在鼠标左键弹起的时刻,开始画线:

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
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);
CView::OnLButtonUp(nFlags, point);
}


我们还可以使用 MFC 为 DC 封装好的一个类(所有与窗口相关的操作都封装的 CWnd,所有与绘图有关的类都被封装到 CDC 中),使用起来更为便捷:

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
CDC *pDC = GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);
CView::OnLButtonUp(nFlags, point);
}


除此之外,MFC 还提供了 CDC 的一个子类,CClientDC,该子类会在构造的时候自动调用 GetDC,在析构的时候调用 ReleaseDC,更为简洁和方便:

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
CClientDC clientDC(this);
clientDC.MoveTo(m_ptOrigin);
clientDC.LineTo(point);

CView::OnLButtonUp(nFlags, point);
}


选择画笔:

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
CPen pen(PS_SOLID, 2, RGB(255, 0, 0));
CClientDC dc(this);
CPen* pOldPen = dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);
CView::OnLButtonUp(nFlags, point);


使用画刷在矩形区域内绘图:

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
CBrush brush(RGB(255, 0, 0));
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin, point), &brush);
CView::OnLButtonUp(nFlags, point);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: