用c++代码写出Use a timer to dynamically display a rectangle moving from right to left in the view. (利用定时器在视图中动态显示一个从右到左移动的矩形。) (提示:用API函数SetTimer设置实时器,在程序中响应定时器消息WM_TIMER
时间: 2024-02-15 08:04:43 浏览: 107
下面是使用 MFC 框架和 C++ 语言编写的代码示例:
首先,在 MFC 的视图类头文件中添加如下内容:
```cpp
class CMyView : public CView
{
public:
CRect m_rect; // 矩形区域
int m_nSpeed; // 移动速度
protected:
afx_msg void OnTimer(UINT_PTR nIDEvent); // 定时器消息处理函数声明
DECLARE_MESSAGE_MAP()
};
```
然后,在视图类的实现文件中添加如下内容:
```cpp
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_WM_TIMER() // 响应定时器消息
END_MESSAGE_MAP()
// 构造函数
CMyView::CMyView()
{
m_rect = CRect(0, 0, 100, 50); // 初始化矩形区域
m_nSpeed = 5; // 初始化移动速度
}
// 定时器消息处理函数
void CMyView::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == 1) // 判断定时器 ID 是否为 1
{
// 移动矩形
m_rect.left -= m_nSpeed;
m_rect.right -= m_nSpeed;
// 判断是否出界
if (m_rect.right <= 0)
{
m_rect.left = 0;
m_rect.right = 100;
}
// 重绘视图
Invalidate();
}
CView::OnTimer(nIDEvent);
}
// 视图绘制函数
void CMyView::OnDraw(CDC* pDC)
{
// 绘制矩形
pDC->Rectangle(m_rect);
}
// 视图创建函数
void CMyView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// 设置定时器,每 10 毫秒触发一次定时器消息
SetTimer(1, 10, NULL);
}
```
最后,在应用程序的主框架类中添加如下代码,将视图类添加到主框架窗口中:
```cpp
BOOL CMyApp::InitInstance()
{
// 创建主框架窗口
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
// 创建视图窗口
CMyView* pView = new CMyView;
pMainFrame->AddView(pView);
// 显示窗口
pMainFrame->ShowWindow(SW_SHOW);
pMainFrame->UpdateWindow();
return TRUE;
}
```
运行程序后,将会在视图中动态显示一个从右到左移动的矩形。
阅读全文