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_计时器,哈哈。