接下来我们说一下时间周期(定时器)事件
我们接下来继续用上一章中的代码来举例
这次课程我们需要用的函数=SetTimer()函数和KillTimer()函数
SetTimer()
语法:
UINT_PTR SetTimer(
[in, optional] HWND hWnd,
[in] UINT_PTR nIDEvent,
[in] UINT uElapse,
[in, optional] TIMERPROC lpTimerFunc
);
参数一:
类型:HWND
要与计时器关联的窗口的句柄。 此窗口必须由调用线程拥有。 如果 hWnd 的 NULL 值与现有计时器的 nIDEvent 一起传入,则替换该计时器的方式与现有非 NULL hWnd 计时器相同。
参数二:
类型: UINT_PTR
非零计时器标识符。 如果 hWnd 参数为 NULL,并且 nIDEvent 与现有计时器不匹配,则忽略它并生成新的计时器 ID。
参数三:
类型: UINT
超时值(以毫秒为单位)。
参数四:
类型: TIMERPROC
指向在超时值过后要通知的函数的指针。 有关 函数的详细信息,请参阅 TimerProc。
代码:
// 添加全局变量
int g_State = 0;
case WM_KEYDOWN:
if (GetAsyncKeyState(VK_F1) != 0)
{
if (g_State == 0)
{
// 开启时钟
SetTimer(hwnd, 1, 2000, NULL);
g_State = 1;
}
KillTimer()
语法:
参数一:
类型:HWND
与指定计时器关联的窗口的句柄。 此值必须与传递给创建计时器的 SetTimer 函数的 hWnd 值相同。
参数二 :
类型: UINT_PTR
要销毁的计时器。 如果传递给 SetTimer 的窗口句柄有效,则此参数必须与 nIDEvent 相同
传递给 SetTimer 的值。 如果应用程序在 hWnd 设置为 NULL 的情况下调用 SetTimer,则此参数必须是 SetTimer 返回的计时器标识符。
代码
else
{
// 关闭时钟
KillTimer(hwnd, 1);
MessageBoxA(NULL,"已关闭","温馨提示",MB_OK);
g_State = 0;
}
此外:
我们还加了一个判定,用来处理时钟消息。以下代码也就是说,每隔2s弹出一个框
代码:
case WM_TIMER:
{
MessageBoxA(NULL, "开启成功", "温馨提示", MB_OK);
break;
}