|
VC++mfc中,SetTimer用法示例源码
在 VC++ MFC 中, `SetTimer` 函数用于设置一个定时器,以便在指定的时间间隔后触发一个消息。通常,这在需要定期执行某些操作时非常有用,比如更新界面或进行定时检查。
### 使用 `SetTimer` 的示例
以下是一个简单的 MFC 应用程序示例,演示如何使用 `SetTimer` 函数。
#### 1. 创建 MFC 应用程序
在 Visual Studio 中创建一个新的 MFC 应用程序项目。
#### 2. 在对话框类中添加定时器
假设我们有一个对话框类 `CMyDialog` ,我们将在其中设置一个定时器。
#### 3. 代码示例
- // MyDialog.h
- #pragma once
- #include "afxwin.h"
- class CMyDialog : public CDialogEx
- {
- public:
- CMyDialog(CWnd* pParent = nullptr); // 标准构造函数
- enum { IDD = IDD_MYDIALOG }; // 对话框 ID
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
- virtual BOOL OnInitDialog(); // 初始化对话框
- virtual void OnTimer(UINT_PTR nIDEvent); // 定时器事件处理
- DECLARE_MESSAGE_MAP()
- };
复制代码
- // MyDialog.cpp
- #include "MyDialog.h"
- BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
- ON_WM_TIMER() // 处理定时器消息
- END_MESSAGE_MAP()
- CMyDialog::CMyDialog(CWnd* pParent /*=nullptr*/)
- : CDialogEx(IDD_MYDIALOG, pParent)
- {
- }
- void CMyDialog::DoDataExchange(CDataExchange* pDX)
- {
- CDialogEx::DoDataExchange(pDX);
- }
- BOOL CMyDialog::OnInitDialog()
- {
- CDialogEx::OnInitDialog();
- // 设置定时器,定时 1000 毫秒(1 秒)
- SetTimer(1, 1000, nullptr);
- return TRUE; // 返回 TRUE,除非将焦点设置到控件
- }
- void CMyDialog::OnTimer(UINT_PTR nIDEvent)
- {
- if (nIDEvent == 1) // 检查定时器 ID
- {
- // 执行定时器事件处理
- AfxMessageBox(_T("定时器触发!")); // 弹出消息框
- }
- CDialogEx::OnTimer(nIDEvent); // 调用基类处理
- }
- // 在应用程序的 InitInstance 中创建对话框
- BOOL CMyApp::InitInstance()
- {
- CWinApp::InitInstance();
- CMyDialog dlg;
- m_pMainWnd = &dlg;
- dlg.DoModal(); // 显示对话框
- return FALSE; // 退出应用程序
- }
复制代码
### 代码说明
1. **设置定时器**:
- 在 `OnInitDialog` 方法中,调用 `SetTimer(1, 1000, nullptr)` ,设置一个 ID 为 `1` 的定时器,每 1000 毫秒(即 1 秒)触发一次。
2. **处理定时器事件**:
- 重写 `OnTimer` 方法,该方法会在定时器触发时被调用。在该方法中,我们检查 `nIDEvent` 是否等于 `1` ,如果是,则执行定时器触发的操作(例如弹出消息框)。
3. **清理定时器**:
- 如果您希望在对话框关闭时停止定时器,可以在 `OnDestroy` 方法中调用 `KillTimer(1)` 来清理定时器。
### 总结
使用 `SetTimer` 和 `OnTimer` 方法,您可以轻松实现定时操作。在实际应用中,您可以根据需要在定时器触发时执行各种操作,比如更新 UI、检查状态等。
|
|