有好些时间没写博客了,今天要来耍一下计时器,就是我们常说的Timer,它虽然不是什么复杂的东西,也称不 上牛X,不过,用处还是不少的,对于那些需要每隔一定时间执行一次的任务,那是相当有用。

先来认识一下一对函数,注意,是一对,不是一个。

SetTimer——设置并启用计时器;

KillTimer——取消计时器。

现在你明白为什么要一对的原因了,就好比进程操作,有启动或创建进程的函数,就肯定要有关闭进程的函数;有GetDC就肯定要伴随着ReleaseDC函数。阴与阳是此消彼长的。

先说SetTimer,函数的定义我不说了,自己看头文件和MSDN就行了,主要说说以下两个参数:

nIDEvent指的是计时器的ID,一个数值,你可以随例取,只要不是负数不是小数就行,例如10,200,56,115,222等;最后一个参数lpTimerFunc是指向一个回调函数的指针,这个与WindowProc类似的,但是这个参数是可以为NULL的。

当该参数为NULL时,在WindowProc中你就要捕捉WM_TIMER消息,不过,这个是消息是低优先级的,系统会在处理完其他消息后,闲着没事干才会来处理WM_TIMER消息。如果lpTimerFunc参数不为NULL,就不用捕捉WM_TIMER了,直接在回调函数中处理即可。

如果所使用的Timer的ID已经存在,那么就会以新的Timer来取代原有的Timer。

KillTimer好说,就是销毁计时器,其中,Timer的ID要与前面SetTimer时用的ID保持一致,这个就不用特别说明了,你拿着你的借书证去图书馆借书,到还书的时候,你当然不会拿别人的借书证去还书吧?

理论的东西都是说多无益,还是用实例来说话吧。

先简单说说这个例子,主要运用计时器,每隔一秒(1000毫秒)执行一次,但每次的情况不同,所以用一个BOOL类型的变量来标识,如果为TRUE就在WM_PAINT事件中把窗口的客户区域填充为红色,如果为FALSE就不填充。如此,就可以使得窗口呈现出一闪一闪的效果。

我只贴出核心代码,完整的例子我随后上传到【资源】中。

  1. // Timer的回调函数
  2. VOID CALLBACK TimerProc(
  3. _In_  HWND hwnd,
  4. _In_  UINT uMsg,
  5. _In_  UINT_PTR idEvent,
  6. _In_  DWORD dwTime
  7. )
  8. {
  9. isBorderDrawed = !isBorderDrawed;
  10. RECT rect;
  11. GetClientRect(hwnd,&rect);
  12. InvalidateRect(hwnd, &rect, TRUE);
  13. }
  1. /* 处理WM_PAINT消息 */
  2. ase WM_PAINT:
  3. hdc = BeginPaint(hWnd, &ps);
  4. // TODO: 在此添加任意绘图代码...
  5. // 获取窗口边框矩形
  6. RECT rect;
  7. GetClientRect(hWnd, &rect);
  8. if (isBorderDrawed)
  9. {
  10. HBRUSH hb = CreateSolidBrush(RGB(255,0,0));
  11. FillRect(hdc,&rect, hb);
  12. SelectObject(hdc,hb);
  13. }
  14. EndPaint(hWnd, &ps);
  15. break;

结果就如下面两图所示。

跟我一起玩Win32开发(24):计时器的更多相关文章

  1. 跟我一起玩Win32开发(转自CSDN-东邪独孤)

    跟我一起玩Win32开发(1):关于C++的几个要点 跟我一起玩Win32开发(2):完整的开发流程 跟我一起玩Win32开发(3):窗口的重绘 跟我一起玩Win32开发(4):创建菜单 跟我一起玩W ...

  2. 跟我一起玩Win32开发(17):启动和结束进程

    这里我再次说明一下,我不知道为什么,现在的人那么喜欢走极端,估计是价值观都“升级”了的缘故吧. 我撰写这一系列Win32相关的文章,并不是叫大家一定要用Win32去开发项目,仅仅是给大家了解一下,Wi ...

  3. 跟我一起玩Win32开发(18):使用对话框的两个技巧

    相信大家知道对话框怎么用了,就是先用“资源编辑器”设计一个对话框,然后在代码中加载处理.今天,我向大家分享两个使用对话框的技巧,还是比较实用的.不用担心,先喝杯茶,很简单的,一点也不复杂,总之,看俺写 ...

  4. 跟我一起玩Win32开发(19):浏览和打开文件

    在应用程序中,我们很经常要实现的功能,是Open文件或保存文件对话框,让用户来选择一个或N个文件.本文我将介绍两种思路,第一种方法较为复杂,第二种方法较为简单. 方法一:老规矩 这是一种传统方法,使用 ...

  5. 跟我一起玩Win32开发(12):使用控件——单选按钮

    今天,咱们还是接着玩“控件斗地主”,这是我原创的超级游戏,有益身心健康,玩一朝,十年少. 哦,对,脑细胞极速运动了一下,想起了一个问题,这个破问题虽然网上有很多种解决方案,但是,并没有让所有人都解决问 ...

  6. 跟我一起玩Win32开发(21):复制&粘贴&剪贴板操作

    我要提醒一下大家,看了我的博文学到的知识,千万不要用于实际开发,不然你会被你的上司骂:“妈的,这些东西哪来的,从来没有人这样做过.”不信你试试,脑细胞被冻结的经理或者技术总监们肯定会这样说的. 如果是 ...

  7. 跟我一起玩Win32开发(4):创建菜单

    也不知道发生什么事情,CSDN把我的文章弄到首页,结果有不少说我在误人子弟,是啊,我去年就说过了,如果你要成为砖家级人物,请远离我的博客,我这个人没什么特长,唯一厉害的一点就是不相信权威,鄙视砖家,所 ...

  8. 跟我一起玩Win32开发(2):完整的开发流程

    上一篇中我给各位说了一般人认为C++中较为难的东西——指针.其实对于C++,难点当然不局限在指针这玩意儿上,还有一些有趣的概念,如模板类.虚基类.纯虚函数等,这些都是概念性的东西,几乎每一本C++书上 ...

  9. 跟我一起玩Win32开发(25):监视剪贴板

    自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种“门前冷落鞍马稀”的感觉.于是,老邪就拿出<九阴真经>认真阅读,同时用迅雷下载经典大剧<汉武大帝>晚上睡觉前看上几集,老邪一 ...

随机推荐

  1. Java单例的实现

    1.声明实例变量(静态) 2.私有化构造函数 3.创建获取实例的方法 public class Singleton{ //创建实例变量 private static Singleton singlet ...

  2. 程序员笔记|Spring IoC、面向切面编程、事务管理等Spring基本概念详解

    一.Spring IoC 1.1 重要概念 1)控制反转(Inversion of control) 控制反转是一种通过描述(在java中通过xml或者注解)并通过第三方去产生或获取特定对象的方式. ...

  3. jquery easyui:EasyUI Treegrid 树形网格

    用jquery easyui 的 Treegrid 树形网格 进行数据展示,不过官网的API 和 demo 让我愣了好久,摸索后整理出来供大家详细参看. jquery easyui 官网:http:/ ...

  4. LeetCode(67)题解: Add Binary

    https://leetcode.com/problems/add-binary/ 题目: Given two binary strings, return their sum (also a bin ...

  5. sim的准确识别技术

    几个月钱,我换了一个手机,本着工科男动手能力强的原则,自己用✂️把sim卡剪成了一个小卡,然后成功的可以使用了. 然而就在昨天,我将卡拿出之后,再放回去,却无法识别我的sim卡了. 我上网查了方法,怀 ...

  6. QT实现FTP服务器(三)

    QFtpClient类的实现: #include "QFtpClient.h" #include <QDebug> #include <QThread> # ...

  7. ios实现倒计时的两种方法

    方法1:使用NSTimer来实现 主要使用的是NSTimer的scheduledTimerWithTimeInterval方法来每1秒执行一次timeFireMethod函数,timeFireMeth ...

  8. POJ2955 Brackets —— 区间DP

    题目链接:https://vjudge.net/problem/POJ-2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Su ...

  9. dedecms时间格式调用标签汇总

    1.时间格式{dede:field name='pubdate' function='strftime("%Y年%m月%d日 %H:%M:%S","@me")' ...

  10. codeforces 691F F. Couple Cover(组合计数)

    题目链接: F. Couple Cover time limit per test 3 seconds memory limit per test 512 megabytes input standa ...