添加定时器,右击对话框属性,右侧属性点击消息,中找到VM_TIMER
WM_TIMER消息添加消息处理函数,或者定义回调函数。
如果调用CWnd::SetTimer函数时最后一个参数为NULL,则通过WM_TIMER的消息处理函数来处理定时事件。添加WM_TIMER消息的处理函数的方法是,在VS2010工程的Class View类视图中找到要添加定时器的类,点击右键,选择Properties,显示其属性页,然后在属性页工具栏上点击Messages按钮,下面列表就列出了所有消息,找到WM_TIMER消息,添加消息处理函数。添加后,cpp文件中会出现类似如下内容:
BEGIN_MESSAGE_MAP(CExample44Dlg, CDialogEx)
......
ON_WM_TIMER()
END_MESSAGE_MAP()
void CExample44Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CDialogEx::OnTimer(nIDEvent);
}
之后就可以在OnTimer函数中进行相应的处理了。OnTimer的参数nIDEvent为定时器ID,即在SetTimer成员函数中指定的定时器ID,如果有多个定时器,我们可以像下面这样处理:
SetTimer(TIM_DB,500,NULL); //设置哪个定时器多久触发
SetTimer(TIM_QU,100,NULL);
void CsoftBDlg::OnTimer(UINT_PTR nIDEvent)
{
CSingleton* pSng = CSingleton::GetInstance();
if (nIDEvent == TIM_DB)
{
CString sql;
sql.Format("Update Sta set Status = 5"); //读取数据库每个字段产品
pSng->_DB.Execute(sql);
SetDlgItemText(IDC_STATIC1,"改成了5");
}
if (nIDEvent == TIM_QU)
{
CString sql,sVal;
sql.Format("Select Top 1 Status from Sta"); //读取数据库每个字段产品
pSng->_DB.ExecuteQueryValue(sql,sVal);
if (sVal == "0")
{
SetDlgItemText(IDC_STATIC1,"变成了0");
}
}
CDialogEx::OnTimer(nIDEvent);
}
运用switch语句处理多个定时器
- void CExample44Dlg::OnTimer(UINT_PTR nIDEvent)
- {
- // TODO: Add your message handler code here and/or call default
- switch (nIDEvent)
- {
- case 1:
- // 如果收到ID为1的定时器的消息则调用func1函数
- func1();
- break;
- case 2:
- // 如果收到ID为2的定时器的消息则调用func2函数
- fun2();
- break;
- ......
- default:
- break;
- }
- CDialogEx::OnTimer(nIDEvent);
- }
- 参考http://www.jizhuomi.com/software/232.html