MFC基于对话窗口画一个随鼠标拖拽形成的三角形
时间: 2023-06-27 22:05:23 浏览: 112
首先,我们需要创建一个基于对话框的 MFC 应用程序,并在对话框上添加一个静态文本框和一个绘图区域(CStatic 类型)。接着,我们需要在对话框类的头文件中添加以下成员变量:
```cpp
CPoint m_MousePos; // 记录鼠标位置
BOOL m_bDragging; // 记录是否正在拖拽
```
在对话框类的 OnInitDialog 函数中,我们需要为绘图区域创建一个 DC,并将其保存到一个成员变量中:
```cpp
m_pDC = m_DrawArea.GetDC();
```
接下来,我们需要处理绘图区域的 WM_LBUTTONDOWN、WM_MOUSEMOVE 和 WM_LBUTTONUP 消息,以实现随鼠标拖拽形成的三角形。具体步骤如下:
1. 在 WM_LBUTTONDOWN 消息处理函数中,记录鼠标位置并将 m_bDragging 设为 TRUE。
```cpp
void CMyDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
m_MousePos = point;
m_bDragging = TRUE;
}
```
2. 在 WM_MOUSEMOVE 消息处理函数中,如果正在拖拽,则计算出移动的距离,并将三角形的顶点坐标计算出来,并通过 CDC::Polygon 函数绘制出来。
```cpp
void CMyDialog::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_bDragging)
{
int dx = point.x - m_MousePos.x;
int dy = point.y - m_MousePos.y;
CPoint pt1(m_MousePos.x, m_MousePos.y);
CPoint pt2(m_MousePos.x + dx, m_MousePos.y);
CPoint pt3(m_MousePos.x, m_MousePos.y + dy);
POINT pts[3] = { pt1, pt2, pt3 };
m_pDC->Polygon(pts, 3);
}
}
```
3. 在 WM_LBUTTONUP 消息处理函数中,将 m_bDragging 设为 FALSE,结束拖拽。
```cpp
void CMyDialog::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bDragging = FALSE;
}
```
最后,在对话框类的 OnDestroy 函数中,需要释放绘图区域的 DC:
```cpp
m_DrawArea.ReleaseDC(m_pDC);
```
这样,随鼠标拖拽形成的三角形就可以在 MFC 的对话框中绘制出来了。
阅读全文