C++代码写出(设计一个MFC应用程序,利用类向导在该程序的视图类中添加响应鼠标左键按下、移动和放开鼠标左键等事件的消息处理函数,在视图中模拟鼠标画图功能。)
时间: 2024-02-15 14:02:10 浏览: 104
以下是一个简单的MFC应用程序,其中视图类 `CMyView` 包含响应鼠标事件的消息处理函数,可以实现鼠标画图功能:
```cpp
// MyView.h
#pragma once
class CMyView : public CView
{
protected:
DECLARE_DYNCREATE(CMyView)
public:
CMyView();
virtual ~CMyView();
protected:
afx_msg void OnDraw(CDC* pDC);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
private:
BOOL m_bDrawing;
CPoint m_ptStart;
CPoint m_ptEnd;
};
// MyView.cpp
IMPLEMENT_DYNCREATE(CMyView, CView)
CMyView::CMyView()
{
m_bDrawing = FALSE;
}
CMyView::~CMyView()
{
}
void CMyView::OnDraw(CDC* pDC)
{
// 绘制已经完成的图形
if (m_bDrawing)
{
pDC->MoveTo(m_ptStart);
pDC->LineTo(m_ptEnd);
}
}
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bDrawing = TRUE;
m_ptStart = m_ptEnd = point;
SetCapture();
}
void CMyView::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bDrawing = FALSE;
ReleaseCapture();
Invalidate();
}
void CMyView::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_bDrawing)
{
m_ptEnd = point;
Invalidate();
}
}
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_WM_DRAWITEM()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
```
在这个应用程序中,`CMyView` 类继承自 `CView` 类,它包含了响应鼠标事件的消息处理函数 `OnLButtonDown`、`OnLButtonUp` 和 `OnMouseMove`,并且实现了鼠标画图功能。
其中,`OnLButtonDown` 函数在鼠标左键按下时被调用,设置了一个标志位 `m_bDrawing` 表示正在画图,记录了鼠标按下的位置 `m_ptStart`,并且调用了 `SetCapture` 函数来捕获鼠标消息。
`OnMouseMove` 函数在鼠标移动时被调用,如果正在画图,则记录当前鼠标位置 `m_ptEnd` 并且调用 `Invalidate` 函数来触发视图重绘。
`OnLButtonUp` 函数在鼠标左键放开时被调用,清除了标志位 `m_bDrawing`,释放了鼠标消息的捕获,并且调用了 `Invalidate` 函数来触发视图重绘。
在 `OnDraw` 函数中,如果正在画图,则使用 `MoveTo` 和 `LineTo` 函数绘制已经完成的图形。
阅读全文