Я заметил, что процедура MessageBox (или любой модальный диалог) не отвечает (зависает) в WM_ACTIVATEAPP обработка сообщений при активации приложения через сенсорный экран, тогда как активация приложения с помощью мыши работает нормально.
case WM_ACTIVATEAPP:
MessageBox(hWnd, TEXT("Not responsing with touchscreen"), TEXT("Help!"), MB_OK);
break;
Окно сообщения отображается без реагирования на щелчок мышью или касание пальцем, и все приложение зависает — мне нужно убить приложение с помощью диспетчера задач.
Это зная ошибка Win32 API? Есть ли решение этой проблемы?
WM_ACTIVATEAPP — это «трудное» сообщение, ваше приложение находится в неловком состоянии, когда ваше окно активируется и получает фокус, но к моменту получения сообщения оно еще не было получено. Вы никогда не захотите ничего делать, чтобы заблокировать обработчик сообщений и написать код, который требует, чтобы активное окно было известно, или изменить активное окно. Как и MessageBox (). Взаимная блокировка не является чем-то необычным, особенно в 32-битном приложении, которое работает в эмуляторе Wow64.
Не блокируйте, просто задерживайте отображение окна сообщения:
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 () — предположение, вы не опубликовали достаточно кода.
Других решений пока нет …