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;

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, 计时器
, 参数
, 借书还书
, 消息
, timer
, win32 rect
一个
,以便于您获取更多的相关知识。

时间: 2024-12-27 09:02:03

Win32开发入门(24):计时器的相关文章

Win32开发入门(10) 绘图(C)

今天我们来欣赏一下用于填充图形的函数,当然我不会逐个去介绍,因为我们参考MSDN直接套参数 就可以了. SetDCBrushColor函数有必要扯一下,它的声明如下: COLORREF SetDCBrushColor( __in HDC hdc, __in COLORREF crColor ); 第二个参数,通过RGB宏产生COLORREF传进去就可以了,比如这样: SetDCBrushColor(ps.hdc,RGB(211,254,41)); 但是,如果只是调用这个函数,你会发现 在绘图的时

Win32开发入门(9) 绘图(B)

我们今天继续涂鸦,实践证明,涂鸦是人生一大乐趣. 首先,我们写一个程序骨架子,以便 做实验. #include <Windows.h> LRESULT CALLBACK MainWinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain( HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpsCmdln, int iShow) { WNDCLASS wc

Win32开发入门(8) 绘图(A)

从本篇开始,我就不吹牛皮,那就吹吹兔皮吧.说说与绘图有关的东东. 要进行绘制,首先 要得到一个DC,啥是DC呢?按字面翻译叫设备上下文,也可以翻译为设备描述表,它主要指API为我们 封装了一些与显示设备相关的交互操作,我们这里说的是图形的绘制,自然指的是显卡.当然,对于同 一客观事物,世界上并不存在唯一的理解方案,技术上的东西最终拿来用的,不应该有硬性的去统一. 我们之中的很多人,最大的失败在于,人家说要这样理解他就毫不怀疑地这样理解,权威人士说要这样 这样,他就不经过大脑思考地跟着那样那样.

Win32开发入门(7) 多边形窗口

通常情况下,窗口都是一个矩形,不过,调用下面这个函数,可以自定义窗口的形状. int SetWindowRgn( __in HWND hWnd, __in HRGN hRgn, __in BOOL bRedraw ); 第一个参数是窗口的句柄,第二个参数也是一个句柄--HRGN,一个多边形的区域,可 以用CreatePolygonRgn函数来创建.第三个参数指定函数调用成功后是否重画窗口,如果窗口还没有显 示,就不必了,如果窗口已经显示,可以考虑设为TRUE. 我们创建用于显示窗口形状的区域句

Win32开发入门(4) 创建菜单

我们当然知道 ,现在,在实际开发中肯定不会像我这样写Win32程序的,你看,连个WinMain都要N行代码.但很多人 不明白什么叫学习,什么叫探索.实际上,通常能用于实际开发中的技巧只是占我们对客观世界的认识 总和不到20%,所以,如果你有兴趣计算一下,估计有80%的知识你不知道用到哪里去了.就算我们今后 不会把Win32程序投入到实际操作中,然而如果你了解过这东西,你会发现很多时候对我们是有帮助的 . 哪怕只是简单认识一下Win32的一些原理,相信对于日后编程的学习和成长,是有益处的. 为了提

Win32开发入门(3) 窗口的重绘

我们今天来吹一下关于窗口重绘的事情,在开始吹牛之前,我们先用上一篇博文中说到的方法写一 个简单的Win32应用程序.代码如下: #include <Windows.h> //先声明一下消息处理函数 LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); // 入口点 int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrvInst

Win32开发入门(15):ListView控件

这个控件其实不用阿拉来介绍,因为它太常见了,就好像我们一出门就会看到妹子一样常见.当然 也可以说,它是对ListBox的扩充. 在使用该控件之前,我先介绍VS的一个相当好玩的功能. 在代码文件的#include指令上右击,从弹出的菜单中选择"生成包含文件关系图",如下图: 开发入门(15):ListView控件-"> 然后你喝一口咖啡,你会看到这样的东西:

Win32开发入门(13) 握手对话框

一提到对话框,相信对它熟悉的人不在少数,更不用说码农们了,你可能会问,对话框和窗口有什 么区别吗?本质上是没有区别的,对话框也是一种窗口(前面也说过,控件也可视为子窗口). 最简单的对话框要数MessageBox弹出来的对话框了,是吧?这个函数我有信心,大家都会用的,毕 竟很简单. 好的,废话不多扯了,马上开始本文第一件事,创建一个对话框. 对话框作为一种资源,它存放在资源文件中(.rc),如果项目中没有rc文件,第一种方法是在"解 决方案资源管理器"中在"资源文件"

Win32开发入门(6):创建右键菜单

快捷菜单,说得容易理解一点,就是右键菜单,当我们在某个区域内单击鼠标右键,会弹出一些菜 单项.这种类型的菜单,是随处可见的,我们在桌面上右击一下,也会弹出一个菜单. 右键菜 单的好处就是方便,它经常和我们正在操作的某个UI元素联系起来,比如我们正在使用文本框输入文本 ,我们在文本框中右击,就会看到可能有[复制][清空][全选]之类的选项,所以,右键菜单也称 为"上下文菜单(Context Menu)". 一般来说,创建并使用快捷菜单,可以按照以下步骤进 行: 1.用资源编辑器创建菜单.

Win32开发入门(5) 具有单选标记的菜单

帅哥们,美女们,下午好,我又来误人子弟,请做好准备. 今天,我们的目的是,想要实现 下图中的这种菜单效果. 开发入门(5) 具有单选标记的菜单-qt 单选菜单"> 就是一种类似单选按钮的菜单,多个菜单项中,同时只有一个会被选中. 首先,我们 在资源编辑器中,设计一个菜单资源.这个资源编辑器在管理资源ID的时候,有些问题,有时候不同步 更新,有时候会保存不到,反正就会混乱.如果遇到问题,你可以先把菜单设计好,接着打开 resource.h,手动把这些ID和它的值改一下.为了使这三个菜单项能形