Один из способов сделать это - вызвать SetTimer, а затем обработать событие WM_TIMER в вашем WndProc. Например, это установит таймер, который вызывается каждые 45 секунд и отображает окно сообщения при его вызове:
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
SetTimer(hwnd, 1, 45000, NULL);
break;
case WM_TIMER:
MessageBox(hwnd, L"Timer", L"Timer fired!", MB_OK);
break;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
Первым параметром SetTimer является окно, в которое вы хотите получить сообщение WM_TIMER - вы, вероятно, хотите, чтобы это было ваше окно, поэтому вы можете просто передать hwnd, что окна передали вам.
Второй параметр - это число, которое вы можете использовать для однозначной идентификации таймера. Вы можете использовать более одного таймера одновременно, и вам потребуется способ узнать, какой из них сработал.
Третий параметр - это как долго вы хотите, чтобы таймер подождал до его срабатывания. Это в миллисекундах, так что вы должны умножить на тысячу, если хотите секунды.
Четвертый параметр равен NULL, если вы хотите обработать таймеры, посмотрев на WM_TIMER. В противном случае вы можете передать указатель на функцию обратного вызова, которая будет вызываться вместо этого.
Помните, таймер будет продолжать срабатывать каждые X миллисекунд, пока вы не убьете его. Вы можете убить его, вызвав KillTimer и передавая тот же номер, который вы передали второму параметру при вызове SetTimer.
Кроме того, когда Windows отправляет вам сообщение WM_TIMER, wParam будет содержать идентификатор таймера, который вы передали во втором параметре при вызове SetTimer.