跟我一起玩Win32开发(24):计时器
有好些时间没写博客了,今天要来耍一下计时器,就是我们常说的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就不填充。如此,就可以使得窗口呈现出一闪一闪的效果。
我只贴出核心代码,完整的例子我随后上传到【资源】中。
- // Timer的回调函数
- VOID CALLBACK TimerProc(
- _In_ HWND hwnd,
- _In_ UINT uMsg,
- _In_ UINT_PTR idEvent,
- _In_ DWORD dwTime
- )
- {
- isBorderDrawed = !isBorderDrawed;
- RECT rect;
- GetClientRect(hwnd,&rect);
- InvalidateRect(hwnd, &rect, TRUE);
- }
- /* 处理WM_PAINT消息 */
- ase WM_PAINT:
- hdc = BeginPaint(hWnd, &ps);
- // TODO: 在此添加任意绘图代码...
- // 获取窗口边框矩形
- RECT rect;
- GetClientRect(hWnd, &rect);
- if (isBorderDrawed)
- {
- HBRUSH hb = CreateSolidBrush(RGB(255,0,0));
- FillRect(hdc,&rect, hb);
- SelectObject(hdc,hb);
- }
- EndPaint(hWnd, &ps);
- break;
结果就如下面两图所示。
跟我一起玩Win32开发(24):计时器的更多相关文章
- 跟我一起玩Win32开发(转自CSDN-东邪独孤)
		跟我一起玩Win32开发(1):关于C++的几个要点 跟我一起玩Win32开发(2):完整的开发流程 跟我一起玩Win32开发(3):窗口的重绘 跟我一起玩Win32开发(4):创建菜单 跟我一起玩W ... 
- 跟我一起玩Win32开发(17):启动和结束进程
		这里我再次说明一下,我不知道为什么,现在的人那么喜欢走极端,估计是价值观都“升级”了的缘故吧. 我撰写这一系列Win32相关的文章,并不是叫大家一定要用Win32去开发项目,仅仅是给大家了解一下,Wi ... 
- 跟我一起玩Win32开发(18):使用对话框的两个技巧
		相信大家知道对话框怎么用了,就是先用“资源编辑器”设计一个对话框,然后在代码中加载处理.今天,我向大家分享两个使用对话框的技巧,还是比较实用的.不用担心,先喝杯茶,很简单的,一点也不复杂,总之,看俺写 ... 
- 跟我一起玩Win32开发(19):浏览和打开文件
		在应用程序中,我们很经常要实现的功能,是Open文件或保存文件对话框,让用户来选择一个或N个文件.本文我将介绍两种思路,第一种方法较为复杂,第二种方法较为简单. 方法一:老规矩 这是一种传统方法,使用 ... 
- 跟我一起玩Win32开发(12):使用控件——单选按钮
		今天,咱们还是接着玩“控件斗地主”,这是我原创的超级游戏,有益身心健康,玩一朝,十年少. 哦,对,脑细胞极速运动了一下,想起了一个问题,这个破问题虽然网上有很多种解决方案,但是,并没有让所有人都解决问 ... 
- 跟我一起玩Win32开发(21):复制&粘贴&剪贴板操作
		我要提醒一下大家,看了我的博文学到的知识,千万不要用于实际开发,不然你会被你的上司骂:“妈的,这些东西哪来的,从来没有人这样做过.”不信你试试,脑细胞被冻结的经理或者技术总监们肯定会这样说的. 如果是 ... 
- 跟我一起玩Win32开发(4):创建菜单
		也不知道发生什么事情,CSDN把我的文章弄到首页,结果有不少说我在误人子弟,是啊,我去年就说过了,如果你要成为砖家级人物,请远离我的博客,我这个人没什么特长,唯一厉害的一点就是不相信权威,鄙视砖家,所 ... 
- 跟我一起玩Win32开发(2):完整的开发流程
		上一篇中我给各位说了一般人认为C++中较为难的东西——指针.其实对于C++,难点当然不局限在指针这玩意儿上,还有一些有趣的概念,如模板类.虚基类.纯虚函数等,这些都是概念性的东西,几乎每一本C++书上 ... 
- 跟我一起玩Win32开发(25):监视剪贴板
		自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种“门前冷落鞍马稀”的感觉.于是,老邪就拿出<九阴真经>认真阅读,同时用迅雷下载经典大剧<汉武大帝>晚上睡觉前看上几集,老邪一 ... 
随机推荐
- Java单例的实现
			1.声明实例变量(静态) 2.私有化构造函数 3.创建获取实例的方法 public class Singleton{ //创建实例变量 private static Singleton singlet ... 
- 程序员笔记|Spring IoC、面向切面编程、事务管理等Spring基本概念详解
			一.Spring IoC 1.1 重要概念 1)控制反转(Inversion of control) 控制反转是一种通过描述(在java中通过xml或者注解)并通过第三方去产生或获取特定对象的方式. ... 
- jquery easyui:EasyUI Treegrid 树形网格
			用jquery easyui 的 Treegrid 树形网格 进行数据展示,不过官网的API 和 demo 让我愣了好久,摸索后整理出来供大家详细参看. jquery easyui 官网:http:/ ... 
- LeetCode(67)题解:  Add Binary
			https://leetcode.com/problems/add-binary/ 题目: Given two binary strings, return their sum (also a bin ... 
- sim的准确识别技术
			几个月钱,我换了一个手机,本着工科男动手能力强的原则,自己用✂️把sim卡剪成了一个小卡,然后成功的可以使用了. 然而就在昨天,我将卡拿出之后,再放回去,却无法识别我的sim卡了. 我上网查了方法,怀 ... 
- QT实现FTP服务器(三)
			QFtpClient类的实现: #include "QFtpClient.h" #include <QDebug> #include <QThread> # ... 
- ios实现倒计时的两种方法
			方法1:使用NSTimer来实现 主要使用的是NSTimer的scheduledTimerWithTimeInterval方法来每1秒执行一次timeFireMethod函数,timeFireMeth ... 
- POJ2955 Brackets —— 区间DP
			题目链接:https://vjudge.net/problem/POJ-2955 Brackets Time Limit: 1000MS Memory Limit: 65536K Total Su ... 
- dedecms时间格式调用标签汇总
			1.时间格式{dede:field name='pubdate' function='strftime("%Y年%m月%d日 %H:%M:%S","@me")' ... 
- codeforces 691F F. Couple Cover(组合计数)
			题目链接: F. Couple Cover time limit per test 3 seconds memory limit per test 512 megabytes input standa ... 
