MessageBox () не отвечает в WM_ACTIVATEAPP на сенсорном экране

Я заметил, что процедура MessageBox (или любой модальный диалог) не отвечает (зависает) в WM_ACTIVATEAPP обработка сообщений при активации приложения через сенсорный экран, тогда как активация приложения с помощью мыши работает нормально.

case WM_ACTIVATEAPP:
MessageBox(hWnd, TEXT("Not responsing with touchscreen"), TEXT("Help!"), MB_OK);
break;

Окно сообщения отображается без реагирования на щелчок мышью или касание пальцем, и все приложение зависает — мне нужно убить приложение с помощью диспетчера задач.

Это зная ошибка Win32 API? Есть ли решение этой проблемы?

0

Решение

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 () — предположение, вы не опубликовали достаточно кода.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]