详细步骤及代码
时间: 2024-02-12 08:06:25 浏览: 127
详细说明和代码
好的,以下是实现步骤及代码:
1. 创建一个 MFC 单文档应用程序。
2. 在 CMyView 类中添加以下变量:
```
CArray<Circle, Circle&> m_circles; // 用于存储所有的圆形
COLORREF m_colors[6] = { RGB(255, 0, 0), RGB(0, 255, 0), RGB(0, 0, 255), RGB(255, 255, 0), RGB(0, 255, 255), RGB(255, 0, 255) }; // 颜色数组
```
3. 在 CMyView 类中添加以下函数:
```
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
// 生成随机颜色和大小
int size = rand() % 100 + 20;
int colorIndex = rand() % 6;
COLORREF color = m_colors[colorIndex];
// 创建圆形对象
Circle circle(point, size, color);
// 将圆形对象添加到数组中
m_circles.Add(circle);
// 重绘视图
Invalidate();
CView::OnLButtonDown(nFlags, point);
}
void CMyView::OnDraw(CDC* pDC)
{
// 绘制所有的圆形
for (int i = 0; i < m_circles.GetSize(); i++)
{
Circle circle = m_circles.GetAt(i);
circle.Draw(pDC);
// 圆形向上移动
circle.MoveUp();
m_circles.SetAt(i, circle);
}
// 清除移出窗口上边沿的圆形
while (m_circles.GetSize() > 0 && m_circles.GetAt(0).IsOutOfTop())
{
m_circles.RemoveAt(0);
}
}
```
4. 在 CMyView 类中添加以下类:
```
class Circle
{
public:
Circle(CPoint center, int radius, COLORREF color) : m_center(center), m_radius(radius), m_color(color) {}
void Draw(CDC* pDC)
{
CBrush brush(m_color);
CBrush* oldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(m_center.x - m_radius, m_center.y - m_radius, m_center.x + m_radius, m_center.y + m_radius);
pDC->SelectObject(oldBrush);
}
void MoveUp()
{
m_center.y -= 5;
}
bool IsOutOfTop()
{
return m_center.y - m_radius < 0;
}
private:
CPoint m_center;
int m_radius;
COLORREF m_color;
};
```
这样,我们就实现了在应用程序窗口内,用鼠标点击任意位置,将会以鼠标点击处为圆心,生成一个大小和颜色均是随机的一个圆。当用户不停点击时,会出现满屏大小不一的圆,圆出现后以均匀垂直向上方运动,直到移出窗口上边沿消失的功能。
希望能对您有所帮助。
阅读全文