mfc鼠标交互绘制多边形
时间: 2023-08-20 07:05:28 浏览: 190
实现MFC鼠标交互绘制多边形的方法如下:
1. 在MFC窗口类中添加以下成员变量:
```c++
CArray<CPoint, CPoint> m_points; // 存储多边形各个顶点坐标的数组
bool m_isDrawing; // 标志是否正在绘制多边形
```
2. 在窗口类的OnLButtonDown、OnMouseMove和OnLButtonUp函数中添加以下代码:
```c++
void CMyWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
// 开始绘制多边形
m_points.RemoveAll();
m_points.Add(point);
m_isDrawing = true;
}
void CMyWnd::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_isDrawing)
{
// 绘制多边形,实时更新多边形的最后一个顶点坐标
m_points[m_points.GetCount() - 1] = point;
Invalidate();
}
}
void CMyWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
if (m_isDrawing)
{
// 完成多边形的绘制,将最后一个顶点坐标加入数组中
m_points.Add(point);
m_isDrawing = false;
Invalidate();
}
}
```
3. 在窗口类的OnPaint函数中添加以下代码:
```c++
void CMyWnd::OnPaint()
{
CPaintDC dc(this);
if (m_points.GetCount() > 1)
{
// 绘制多边形
dc.Polygon(m_points.GetData(), m_points.GetCount());
}
}
```
4. 在窗口类的PreCreateWindow函数中添加以下代码,使窗口支持鼠标消息:
```c++
cs.style |= WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, ::LoadCursor(NULL, IDC_ARROW), NULL, NULL);
```
这样,就可以通过鼠标交互绘制多边形了。