文章出处:http://blog.sina.com.cn/s/blog_86f7b9c70101eob1.html
定时器简介
定时器,可以帮助开发者或者用户定时完成某项任务。在使用定时器时,我们可以给系统传入一个时间间隔数据,然后系统就会在每个此时间间隔后触发定时处理程序,实现周期性的自动操作。例如,我们可以在数据采集系统中,为定时器设置定时采集时间间隔为1个小时,那么每隔1个小时系统就会采集一次数据,这样就可以在无人操作的情况下准确的进行操作。
MFC定时器:VS2010编程中,我们可以使用MFC的CWnd类提供的成员函数SetTimer实现定时器功能,也可以使用Windows API函数SetTimer来实现。两者使用方法实际上很类似,但也有不同。
CWnd类的SetTimer成员函数只能在CWnd类或其派生类中调用,而API函数SetTimer则没有这个限制,这是一个很重要的区别。因为本教程主要是讲解MFC编程,所以这里就先重点讲解MFC定时器的用法。
一.我们就做一个gif 动画一样的吧! 这里的 gif分解后下载
http://pan.baidu.com/s/1bnkvNJp
1 .我们先新建一个mfc 基于对话框的应用程序。
2 . 删除对话框上的控件 , 改对话框的属性Border ->None
3 .添加一个消息:WM_TIMER -> OnTimer
4 .把图片放在工程的res目录下;
并在工程中添加资源,把这6张图片添加到资源目录下;然后右键->id= 资源符号 ->那几张图片的的id(我的是129-134)
5 .在class 中添加
class xxx
{
public:
int m_bitid;
}
并在构造函数中添加
xxxdlg::xxdlg()
{
m_bitid=128; //这里我令他的初始值比id小一个数
}
6.在函数CxxxxDlg::OnInitDialog()中 添加:
{
this->SetTimer(1,100,NULL); //设置定时器。
//这里时间100毫秒,可以自己调整,调节到适合的最好。
//killtimer 我这里没有用到。
}
定时器
killtimer
7.在函数 CxxxDlg::OnTimer(UINT_PTR nIDEvent) 函数中添加 :
点击ontimer介绍
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
CRect rect;
CBrush brush;
CBitmap bitmap;
if(m_bitid<134)
m_bitid++; ///让id++,循环读取这6张图片
else
m_bitid=129; //要是+到了最后一张,我们让它回到第一张
bitmap.LoadBitmapW(m_bitid); //加载图片资源,根据这个变化的ID
brush.CreatePatternBrush(&bitmap);
this->GetClientRect(rect);
switch (nIDEvent)
{
case 1: dc.FillRect(rect,&brush); break;
//这里当然就是贴图,定时器的响应
}
CDialogEx::OnTimer(nIDEvent);
}
8.运行,效果就出来了。像gif 一样的动。
mfc 的定时器应用很广泛,使用也并不困难,灵活运用可以做出来很炫的效果,定时器不只是做界面,用到其他地方也有很好的效果。