创建窗口后,我启动了一个计时器来做某事。像这样的代码:
SetTimer(hWnd, 1, 40, NULL); //tick each 40 ms.
我追踪了最后一个错误,即0.但我无法收到wm_timer!像这样的代码:
case WM_TIMER:
{
//...
}
我的IDE是VS2010,操作系统是Windows7,那么有关我使用环境的一些特殊情况吗?
P.S。好吧,我提供更多代码,这是一个win32应用程序,所以在WinMain:
HWND hWnd = CreateWindow(...); //style : WS_POPUP | WS_VISIBLE , return is good
SetTimer(hWnd, 1, 40, NULL); //return is good too.
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
和WndProc:
switch(message)
{
case WM_TIMER:
{
DebugBreak(); //no reaction
}
break;
.......
}
答案 0 :(得分:2)
WM_TIMER
将无法触发,因为它们将优先使用。例如,其中一个原因是没有正确处理WM_PAINT
条消息(您必须BeginPaint()
/ EndPaint()
)
答案 1 :(得分:0)
就我的记忆而言,问题源于你过早放置SetTimer调用的事实。将其放在WM_CREATE。
switch(message)
{
case WM_CREATE:
{
SetTimer(hWnd, 1, 40, NULL);
}
case WM_TIMER:
{
DebugBreak(); //no reaction
}
break;
.......
}
我没有看到任何其他原因导致故障。
答案 2 :(得分:0)
我有同样的问题。如果我在SetTimer()
部分中添加“WM_CREATE
”,则无法启动。但是,如果我创建一个我需要单击的菜单选项,并在其中放置“SetTimer()
”函数,
它有效。
case WM_CREATE:
{
SetTimer(hWnd, 1, 1000, NULL); // does not work here
return 0:
}
case ID_TIMER_START:
{
SetTimer(hWnd, 1, 1000, NULL); // works here
return 0;
}