mfc HDC 橡皮筋绘制矩形
时间: 2023-08-16 07:04:23 浏览: 252
MFC实现橡皮筋画线
在MFC中,可以使用CDC类来进行绘图。要实现橡皮筋绘制矩形,可以通过鼠标移动事件获取矩形的位置和大小,并在每次移动时重新绘制矩形。
以下是一个简单的示例代码:
```cpp
void CMyView::OnMouseMove(UINT nFlags, CPoint point)
{
if (nFlags & MK_LBUTTON)
{
CDC* pDC = GetDC();
// 绘制之前的矩形,先用背景色擦掉
pDC->DrawFocusRect(m_oldRect);
// 计算新的矩形位置和大小
m_newRect.left = min(m_startPoint.x, point.x);
m_newRect.right = max(m_startPoint.x, point.x);
m_newRect.top = min(m_startPoint.y, point.y);
m_newRect.bottom = max(m_startPoint.y, point.y);
// 绘制新的矩形
pDC->DrawFocusRect(m_newRect);
ReleaseDC(pDC);
}
CView::OnMouseMove(nFlags, point);
}
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_startPoint = point;
m_oldRect = m_newRect = CRect(point, point);
SetCapture();
CView::OnLButtonDown(nFlags, point);
}
void CMyView::OnLButtonUp(UINT nFlags, CPoint point)
{
ReleaseCapture();
CView::OnLButtonUp(nFlags, point);
}
```
在这个示例中,我们使用了三个变量来保存矩形的信息:
- `m_startPoint`:鼠标按下时的位置,即矩形的左上角坐标。
- `m_oldRect`:上一次绘制的矩形,用于在绘制新的矩形前擦除旧的矩形。
- `m_newRect`:当前正在绘制的矩形。
在 `OnLButtonDown` 函数中,我们记录下鼠标按下时的位置,并将 `m_oldRect` 和 `m_newRect` 初始化为一个点的矩形。
在 `OnMouseMove` 函数中,我们首先判断鼠标左键是否按下,如果按下了,就获取设备上下文(Device Context,简称DC),然后擦除旧的矩形(即 `m_oldRect`)并计算新的矩形位置和大小(即 `m_newRect`),最后绘制新的矩形。
在 `OnLButtonUp` 函数中,我们释放鼠标捕获,并调用基类的函数。
通过这样的方式,我们就可以实现橡皮筋绘制矩形的功能了。
阅读全文