我的应用无法接收wm_timer消息

时间:2012-12-15 21:16:54

标签: windows winapi

创建窗口后,我启动了一个计时器来做某事。像这样的代码:

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;
.......
}

3 个答案:

答案 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;
    }