鱼C论坛

 找回密码
 立即注册

罗云彬老师第6章---定时器

热度 2已有 934 次阅读2012-1-13 21:40

首先,定时器不等于时钟,罗云彬老师已经明确解释过这个问题了。
 
其实定时器的程序非常简单,书上是通过申请了3个定时器,让每个定时器实现一个功能来让大家理解定时器的概念。
 
代码分成3部分:
 
首先从start入口程序,在建立对话框的时候,跳入_ProcDlgMain函数,然后在WM_INITDIALOG中申请三个定时器,前面两个定时器如下:
invoke  SetTimer, hWnd, ID_TIMER1, 250, NULL
invoke  SetTimer, hWnd, ID_TIMER2, 2000, NULL
 
这两句指令好理解的,因为和前面学习的都差不多,这里就不解释了,不懂的可以看书,上面解释的很清楚。
这两个定时器的功能稍提一下,ID_TIMER1实现自动更换图片的目的是通过SendDlgItemMessage向控件发送STM_SETIMAGE消息来实现更换图片。而第二个定时器的功能用的是MessageBeep函数,这个函数不解释~~~
 
有意思的是第三个定时器,也就是:
invoke  SetTmer, NULL, NULL, 1000, addr _ProcTimer
 
这句指令并没有指定所申请的定时器的标识符,但是Windows会自动返回一个配对的标识符到eax,我们要把这个自动返回的标识符保存起来,因为我们在KillTimer的时候要用到它。并且,这样申请的定时器,不会向消息列队中发送WM_TIMER消息,而是直接把程序连接到_ProcTimer子程序中,我们可以通过子程序来实现我们想要的目的。好的,我们来总结一下第三个定时器的作用,它的作用是在对话框中的“计数:”中每隔1s时间自动加“1”,并且显示出来
 
可能一部分人对GetDlgItemInt这个函数会有疑问,这个函数其实就是获取IDC_COUNT控件上的文本,并且转变会整型数值返回到eax中,相反的,SetDlgItemInt函数则是把整型数值放回到IDC_COUNT控件中。
值得注意的是,当IDC_COUNT控件上什么也没有的时候,GetDlgItemInt返回的是“0”,也就是源代码中直接通过INC eax来自动+1的目的。
 
解释完毕~~~
 
 
                                                                                                                                     鱼C工作室    BinGu
 
 
 
 
 
 
 
 已同步至 BinGu的微博

路过

鸡蛋

鲜花
2

握手

雷人

刚表态过的朋友 (2 人)

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 17:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部