Windows 我的应用程序无法接收wm_定时器消息

Windows 我的应用程序无法接收wm_定时器消息,windows,winapi,Windows,Winapi,创建窗口后,我启动了一个计时器来做某事。代码如下: SetTimer(hWnd, 1, 40, NULL); //tick each 40 ms. case WM_TIMER: { //... } 我跟踪了最后一个错误,即0。但是我不能接收wm_定时器!代码如下: SetTimer(hWnd, 1, 40, NULL); //tick each 40 ms. case WM_TIMER: { //... } 我的IDE是VS2010,操作系统是Windows7,所

创建窗口后,我启动了一个计时器来做某事。代码如下:

SetTimer(hWnd, 1, 40, NULL);  //tick each 40 ms.
case WM_TIMER:
{
     //...
}
我跟踪了最后一个错误,即0。但是我不能接收wm_定时器!代码如下:

SetTimer(hWnd, 1, 40, NULL);  //tick each 40 ms.
case WM_TIMER:
{
     //...
}
我的IDE是VS2010,操作系统是Windows7,所以我使用的环境有什么特殊情况吗

好的,我提供了更多的代码,这是一个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;
.......
}

据我记忆所及,问题源于您过早地调用了SetTimer。将其放置在WM_CREATE中

switch(message)
{
    case WM_CREATE:
    {
        SetTimer(hWnd, 1, 40, NULL);
    }
    case WM_TIMER:
    {
        DebugBreak();  //no reaction
    }
    break;
    .......
}

我看不出这会出现故障的任何其他原因。

WM\u TIMER
如果您无法使用其他消息,则不会启动,因为它们将优先使用。例如,其中一个原因是没有正确处理
WM_PAINT
消息(您必须
BeginPaint()
/
EndPaint()

我也有同样的问题。如果我将“
SetTimer()
”放在
WM\u 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;
    }

是的,是1。回报不错。你需要发布更多的代码。如何设置WndProc以及在何处启动计时器。另外,创建窗口和计时器的线程中是否有消息循环?您做错了什么。为了了解是在生成计时器消息之前,还是在生成计时器消息但未能正确处理之前,请使用
Spy++
SDK工具检查窗口消息,并确定是否有计时器消息。@在这种情况下,您应该发布更多的代码,就像整个主过程一样。一定有什么东西坏了,这不是核物理:我知道了!WM_绘画信息总是发送,所以我无法接收WM_计时器,哈哈。