• 计时器函数跟我一起玩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消息 */
    	case 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;

        
     

        结果就如上面两图所示。

        计时器和函数

        计时器和函数

    文章结束给大家分享下程序员的一些笑话语录: 程序员打油诗   
      写字楼里写字间,写字间里程序员;
      程序人员写程序,又拿程序换酒钱。
      酒醒只在网上坐,酒醉还来网下眠;
      酒醉酒醒日复日,网上网下年复年。
      但愿老死电脑间,不愿鞠躬老板前;
      奔驰宝马贵者趣,公交自行程序员。
      别人笑我忒疯癫,我笑自己命太贱;
      不见满街漂亮妹,哪个归得程序员。

  • 相关阅读:
    光棍节的小窃喜
    叶子的飘逝,是谁的错
    IDEA日志文件使用EmEditor打开————解决打开大txt文件崩溃的问题
    java并发编程系列(一):java多线程中常用指令
    HashMap理解
    RabbitMQ入门
    Docker学习笔记
    elementui级联选择器(elcascader)改变value与label
    tinymce富文本不刷新二次打开无法编辑问题
    融合通信常见问题2月刊 | 云信小课堂
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3074151.html
Copyright © 2020-2023  润新知