【笔试/面试】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); }