目录

C语言学习day25WinAPI编程进阶07-游戏辅助时钟周期事件定时器消息

C语言学习day25:WinAPI编程进阶07-游戏辅助时钟周期事件、定时器消息

接下来我们说一下时间周期(定时器)事件

我们接下来继续用上一章中的代码来举例

这次课程我们需要用的函数=SetTimer()函数和KillTimer()函数

SetTimer()

语法:

UINT_PTR SetTimer(
  [in, optional] HWND      hWnd,
  [in]           UINT_PTR  nIDEvent,
  [in]           UINT      uElapse,
  [in, optional] TIMERPROC lpTimerFunc
);

参数一:

类型: HWND

要与计时器关联的窗口的句柄。 此窗口必须由调用线程拥有。 如果 hWndNULL 值与现有计时器的 nIDEvent 一起传入,则替换该计时器的方式与现有非 NULL hWnd 计时器相同。

参数二:

类型: UINT_PTR

非零计时器标识符。 如果 hWnd 参数为 NULL ,并且 nIDEvent 与现有计时器不匹配,则忽略它并生成新的计时器 ID。

参数三:

类型: UINT

超时值(以毫秒为单位)。

参数四:

类型: 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

与指定计时器关联的窗口的句柄。 此值必须与传递给创建计时器的 函数的 hWnd 值相同。

参数二 :

类型: UINT_PTR

要销毁的计时器。 如果传递给 窗口句柄有效,则此参数必须与 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;
    }