使用计时器的三种方法:
如果程序在整个运行过程中需要一一个 计时器,在WinMain函数中或处理WM_ CREATE消息时,调用SetTimer函数;在离开WinMain函数时或是处理WM DESTROY消息时,调用KillTimer 函数。基于调用SetTimer参数的不同,可采取以下三种方法之一使用计时器。
方法一:SetTimer (hwnd, 1, uiMsecInterval, NULL) ;第一个参数是窗口句柄,它指向接收WM_TIMER消息的窗口程序。第二个参数是一个设计器的ID,他不能为0。第三个三叔是一个32位的无符号整数,它指定以毫秒为单位的时间间隔。
你可以在任何时刻(甚至当处理WM_ TIMER消息时)停止WM TIMER消息,方法如下:KillTimer (hwnd, 1) ;
如果你需要设置多个计时器,那么每个计时器应使用不同的ID,wParam的值将帮助区分送到窗口过程的WM_TIMER消息。为了使程序易于理解,可以使用#define指令定义不同的计时器ID。
#define TIMER_ SEC 1
#define TIMER_ MIN 2
然后通过两个SetTimer函数调用分别设置两个计时器:
SetTimer (hwnd, TIMER
SEC,1000,NULL) ;
SetTimer (hwnd, TIMER_ MIN, 60000,NULL) ;

WM_ TIMER的处理逻辑如下:case WM_ _TIMER:switch (wParam)case TIMER_ SEC: ;[每秒钟一次的处理]break;case TIMER_ MIN:[每分钟一次的处理]break;}return 0;

方法二:受到计时器消息的函数称为回调函数,这是程序中被windows调用的函数。你告诉Windows这个函数的地址,windows这个函数的地址,Windows以后就会调用这个函数。
SetTimer不是唯-使用回调功能的Windows函数。CreateDialog 和DialogBox函数(将在第11章讨论)都使用回调函数处理对话框的消息:有几个Windows 函数(EnumChildWindow、EnumFonts、 EnumObjects、 EnumProps 和EnumWindow)会传递枚举信息到回调函数;还有几个不常用的函数GrayString. LineDDA和SetWindowHookEx)也要求使用回调函数功能。
类似于窗口过程,回调函数必须定义为CALLBACK类型,因为Windows是从程序的代码空间以外调用这个函数的。送到回调函数的参数和从回调函数返回的数据是由该函数要实现的功能所决定的。当回调函数与计时器同时使用时,它的参数实际上与窗口过程的参数一一样的,只不过他们的定义是不同的。但是,计时器的回调函数并不返回数值给windows。
我们给回调函数起名为TimerProc。(可选择任何名字,只要不与其他的函数同名。)这个函数只处理WM_TIMER消息:
VOID CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
[处理WM_ TIMER消息]
}
TimerProc函数的hwnd 参数是你调用SetTimer 时指定的窗口句柄。Windows只发送WM__TIMER消息到TimeerProc,所以消息参数总是WM_ TIMER。iTimerID值是计时器的ID。dwTime是从GetTickCount函数返回的值,它记录了自从Windows启动到现在所逝去的毫秒数。
正如我们在BEEPER1看到的,第一种设置计时器的方法要求以如下方式调用SetTimer
函数:SetTimer(hwnd,iTimerID, iMsecInterval, NULL) ;
而使用回调函数处理WM__TIMER消息时,SetTimer函数的第四个参数必须设定为回调函
数的地址: SetTimer (hwnd, iTimerID, iMsecInterval, TimerProc) ;

方法三:第三种设置计时器的方法与第二种方法相似,只不过SetTimer的hwnd参数被设置为NULL,而且第二个参数(正常情况下是计时器的ID)被忽略了。此外,这个函数会返回计时器的ID:
iTimerID = SetTimer (NULL, 0, wMsecInterval, TimerProc) ;
如果SetTimer函数返回的iTimerID为0,表示没有可用的计时器,这样的情况是极罕见的。
传给KillTimer的第一个参数(通常是窗口的句柄)也必须是NULL。计时器的ID必须是从SetTimer返回的值:
KillTimer (NULL, iTimerID) ;
传给TimerProc计时器函数的hwnd参数也将是NULL。这种设置计时器的方法很少用到。如果在程序中,需要在不同的时刻调用很多次SetTimer,但又不想记录哪些计时器ID已经被使用过,那么这种方法可能会派上用场。

windows程序设计(计时器)相关推荐

  1. Windows程序设计最新书籍教程

    <深入浅出Windows API程序设计:编程基础篇> 出版社:人民邮电出版社 书号:978-7-115-56948-6 出版时间:2022-05-01 ◆ 基础篇的内容是学习Window ...

  2. Windows程序设计学习笔记(1):一个简单的windows程序

    <Windows程序设计>(第五版)(美Charles Petzold著) 1 #include<windows.h> 2 3 LRESULT CALLBACK WndProc ...

  3. Windows程序设计------字体不等宽引出的问题及其细节知识

    在写Windows程序设计的Typer程序时,我并不是在每一个使用HDC的地方都重新创建选中字体,而是在一开始选中之后,就没有再删除它,代码如图: 结果我的字体不是等宽字体! 起先我以为是没有设置WM ...

  4. Windows程序设计“圣经”

    Windows程序设计"圣经" 十年依旧畅销不衰的神品 传奇大师带你走入Windows编程圣殿 "Windows程序设计最举足轻重的书当然就是Charles Petzol ...

  5. 侯捷:搞Windows程序设计我们需要啥

    侯捷:搞Windows程序设计我们需要啥 如果你是一位资深的Windows程序员,相信你对Jeffrey Richter一定不会陌生,是不是有些崇拜和景仰?如果你是一位刚涉足这个领域的Windows程 ...

  6. Windows程序设计之创建窗口示例

    Windows程序设计书本上的创建窗口示例,手敲代码,拿出了show,记录一下而已~~~ 一.代码如下: #include <tchar.h> #include <windows.h ...

  7. c语言lnk1168无法打开exe,跪求大佬帮帮看看LINK : fatal error LNK1168: 无法打开 F:\windows程序设计\窗口\......

    马上注册,结交更多好友,享用更多功能^_^ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 运行的结果显示是这样: 1>------ 已启动生成: 项目: 窗口, 配置: Debug W ...

  8. createprocess重启程序_C++_VC程序设计中CreateProcess用法注意事项,对于windows程序设计来说,启动 - phpStudy...

    VC程序设计中CreateProcess用法注意事项 对于windows程序设计来说,启动一个进程有三种方法:WinExec,ShellExecute,CreateProcess.这里仅对Create ...

  9. windows程序设计.第一个windos程序

    Windows程序设计(第5版) windows程序需要调用API. 第一个Windows程序 1 /*HelloMsg.c -- Displays "Hello World!" ...

  10. [渝粤教育] 中国地质大学 Windows程序设计 复习题 (2)

    <Windows程序设计>模拟题 一单选题 1.所有的Windows应用程序都是由()驱动的. A.事件 B.消息 C.命令 D.菜单 2.一般应用程序不会派生自己的()类. A.主框架 ...

最新文章

  1. ListMapSet的操作和遍历
  2. python 数据分析
  3. 装饰器,闭包,高阶函数,嵌套函数
  4. 博客页面运行代码demo测试
  5. VTK:PolyData之InterpolateMeshOnGrid
  6. Memcahce和Redis比较
  7. 防止ViewPager中的Fragment被销毁的方法
  8. ServiceManager学习框图
  9. 用友服务器ip地址在哪里修改密码,用友服务器ip地址在哪里修改密码
  10. 【新书推荐】【2019.01】离散数学及其应用(第五版)
  11. 中兴2016校招软件在线笔试题
  12. C#一年级100以内的加减训练
  13. [BUGKU] [REVERSE] 逆向入门
  14. 大尺寸背光检测~Dalsa线阵相机资料
  15. DELPHI 线程类
  16. 解决:kill 不掉进程
  17. [LeetCode]122. Best Time to Buy and Sell Stock II
  18. 剪气球串 java_气球的8种创新科学玩法,玩过3样算你牛
  19. python关于re模块(正则表达式)
  20. 未来5年最赚钱行业 创业10大绝佳项目

热门文章

  1. 大数据变现,这里有9种商业模式,你走的哪条路?
  2. 用 Python 画一张北京实时疫情地图:从爬虫到绘图到自动上传服务器
  3. 借身份证给别人办理流量卡有风险吗?这些情况你必须要知道!
  4. 手机运行慢可以刷机吗_一加手机7T(8+128GB) 安卓手机越来越慢,手机越来越卡怎么解决?...
  5. PC_主存芯片和cpu的连接_存储芯片的译码驱动方式和字位扩展案例
  6. 黑马CSS笔记(二)盒子模型
  7. 微软鼠标水平滚轮失灵的解决方法
  8. 黑莓Java应用开发环境
  9. 一文了解大四毕业生毕业流程(待更新..)
  10. centos 日志切割_Linux 日志切割工具cronolog详解