在C++中,可以使用Windows API中的SetTimer函数来创建一个计时器,该函数的原型如下:
```
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 计时器标识符
UINT uElapse, // 计时间隔,单位为毫秒
TIMERPROC lpTimerFunc// 计时器回调函数
);
```
其中,hWnd参数是要接收计时器消息的窗口句柄,nIDEvent是计时器的标识符,可以用于取消计时器,uElapse是计时间隔,单位是毫秒,lpTimerFunc是计时器回调函数,当计时器到达指定时间时,系统会发送一个WM_TIMER消息给指定窗口,同时调用回调函数。
以下是一个简单的示例代码,实现了每秒钟在窗口标题中显示当前时间:
```c++
#include <Windows.h>
#include <string>
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
// 创建一个每秒钟触发一次的计时器
SetTimer(hWnd, 1, 1000, NULL);
break;
case WM_TIMER:
if (wParam == 1)
{
// 获取当前时间
SYSTEMTIME st;
GetLocalTime(&st);
std::wstring title = L"Current Time: ";
title += std::to_wstring(st.wHour) + L":" + std::to_wstring(st.wMinute) + L":" + std::to_wstring(st.wSecond);
// 更新窗口标题
SetWindowText(hWnd, title.c_str());
}
break;
case WM_DESTROY:
// 销毁计时器
KillTimer(hWnd, 1);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 注册窗口类
WNDCLASS wc = { 0 };
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszClassName = L"TimerDemo";
RegisterClass(&wc);
// 创建窗口
HWND hWnd = CreateWindow(L"TimerDemo", L"Timer Demo", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
// 显示窗口
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// 消息循环
MSG msg = { 0 };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
```
该示例代码中,我们在窗口创建时创建了一个每秒钟触发一次的计时器,并在计时器回调函数中获取当前时间,并将其显示在窗口标题中。在窗口销毁时,我们销毁了计时器。