Visual 2010中MFC编写小球自由落体
时间: 2024-01-21 13:03:45 浏览: 30
以下是一个在Visual Studio 2010中使用MFC编写的小球自由落体的示例程序:
1. 创建一个新的MFC项目,并选择“对话框”作为应用程序类型。
2. 打开“资源视图”,双击“对话框”资源,然后将一个“画布”控件拖放到对话框上。
3. 双击“画布”控件,将其ID更改为“IDC_CANVAS”,并将其“类”更改为“CStatic”。
4. 打开“类向导”,并添加一个新的类,名称为“CBall”,从“CObject”类派生。
5. 在CBall类中添加以下成员变量:
```cpp
CRect m_rect; // 球的矩形范围
CPoint m_pos; // 球的位置
CPoint m_speed; // 球的速度
int m_radius; // 球的半径
```
6. 添加以下成员函数:
```cpp
void Draw(CDC* pDC); // 绘制球
void Move(); // 移动球
```
7. 在CBall.cpp中实现Draw和Move函数:
```cpp
void CBall::Draw(CDC* pDC)
{
// 绘制球
pDC->Ellipse(m_rect);
}
void CBall::Move()
{
// 更新球的位置
m_pos += m_speed;
m_rect.left = m_pos.x - m_radius;
m_rect.top = m_pos.y - m_radius;
m_rect.right = m_pos.x + m_radius;
m_rect.bottom = m_pos.y + m_radius;
// 碰到边界反弹
CRect rcClient;
GetClientRect(&rcClient);
if (m_rect.left < rcClient.left || m_rect.right > rcClient.right)
{
m_speed.x = -m_speed.x;
}
if (m_rect.top < rcClient.top || m_rect.bottom > rcClient.bottom)
{
m_speed.y = -m_speed.y;
}
}
```
8. 在OnInitDialog函数中创建一个CBall对象,并设置其初始位置、速度和半径:
```cpp
BOOL CMyDlg::OnInitDialog()
{
// ...
// 创建球
m_pBall = new CBall;
m_pBall->m_pos = CPoint(100, 100);
m_pBall->m_speed = CPoint(5, 5);
m_pBall->m_radius = 20;
return TRUE;
}
```
9. 在OnPaint函数中绘制球:
```cpp
void CMyDlg::OnPaint()
{
CPaintDC dc(this);
// 绘制画布背景
CRect rcClient;
GetClientRect(&rcClient);
dc.FillSolidRect(rcClient, RGB(255, 255, 255));
// 绘制球
m_pBall->Draw(&dc);
}
```
10. 在OnTimer函数中移动球,并调用Invalidate函数重绘:
```cpp
void CMyDlg::OnTimer(UINT_PTR nIDEvent)
{
// 移动球
m_pBall->Move();
// 重绘画布
Invalidate();
CDialogEx::OnTimer(nIDEvent);
}
```
11. 在OnInitDialog函数中启动定时器:
```cpp
BOOL CMyDlg::OnInitDialog()
{
// ...
// 启动定时器
SetTimer(1, 20, NULL);
return TRUE;
}
```
现在,你可以运行这个程序,在画布上看到一个小球自由落体的动画效果。