我注意到MessageBox例程(或任何模式对话框)在通过触摸屏激活应用程序时在 WM_ACTIVATEAPP 消息处理中没有响应(挂起),而通过鼠标激活应用程序工作正常。
case WM_ACTIVATEAPP:
MessageBox(hWnd, TEXT("Not responsing with touchscreen"), TEXT("Help!"), MB_OK);
break;
显示消息框而不响应鼠标单击或手指触摸,整个应用程序冻结 - 我必须使用任务管理器杀死应用程序。
这是Win32 API的一个知道错误吗?有没有解决这个问题的工作?
答案 0 :(得分:2)
WM_ACTIVATEAPP是一个“难”的消息,你的应用程序处于一种尴尬状态,你的窗口正在被激活并获得焦点,但是当你收到消息时它还没有到达那里。您永远不想做任何事情来阻止消息处理程序并编写需要知道活动窗口的代码或更改活动窗口。像MessageBox()一样。死锁并不罕见,尤其是在Wow64仿真器中运行的32位应用程序中。
不要阻止,只是延迟显示消息框:
case WM_ACTIVATEAPP:
PostMessage(hWnd, WM_USER, NULL, NULL);
DefWindowProc(hWnd, msg, wparam, lparam);
break;
case WM_USER:
MessageBox(hWnd, TEXT("Responsing with touchscreen"), TEXT("Okay!"), MB_OK);
break;
是否需要DefWindowProc()调用是猜测,你没有发布足够的代码。