请帮我写一份MFC单文档的绘图撤销代码
时间: 2023-12-10 22:38:49 浏览: 156
好的,以下是一份简单的MFC单文档绘图撤销代码:
首先,在你的文档类中定义一个`std::vector`类型的成员变量,用于存储绘制操作,代码如下:
```cpp
class CMyDoc : public CDocument
{
protected:
std::vector<CRect> m_drawOps; // 存储绘制操作
// ...
};
```
然后,在你的视图类中添加以下代码:
```cpp
void CMyView::OnDraw(CDC* pDC)
{
// 绘制之前的所有操作
for (auto& op : GetDocument()->m_drawOps)
{
pDC->Rectangle(op);
}
}
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
// 记录鼠标按下时的坐标
m_startPt = point;
CView::OnLButtonDown(nFlags, point);
}
void CMyView::OnLButtonUp(UINT nFlags, CPoint point)
{
CRect rect;
// 计算矩形区域
rect.left = min(m_startPt.x, point.x);
rect.top = min(m_startPt.y, point.y);
rect.right = max(m_startPt.x, point.x);
rect.bottom = max(m_startPt.y, point.y);
// 将绘制操作存入文档类的m_drawOps中
GetDocument()->m_drawOps.push_back(rect);
// 重绘视图
Invalidate(FALSE);
CView::OnLButtonUp(nFlags, point);
}
void CMyView::OnEditUndo()
{
// 撤销绘制操作
if (!GetDocument()->m_drawOps.empty())
{
GetDocument()->m_drawOps.pop_back();
Invalidate(FALSE);
}
}
```
以上代码实现了绘制矩形并将绘制操作存入文档类的`m_drawOps`中,同时当用户按下Ctrl+Z时,可以撤销最后一次绘制操作。注意,这里只实现了矩形的绘制,你可以根据需求修改为其他形状的绘制。
阅读全文