2016-01-15 4 views
0

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

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

Сообщение окно показывает без responsing мышиных кнопкой мыши или нажатием пальца и все приложения замораживания - я должен убить приложение с помощью диспетчера задач.

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

+0

Можете ли вы предоставить более подробную информацию? Как вы определили, что висит в обработке сообщений WM_ACTIVATEAPP? –

+0

Какую версию Windows вы используете? Поддержка сенсорного ввода Windows 7 довольно сломана. Он был переработан, начиная с Windows 8. – IInspectable

+0

Фрагмент кода может помочь – Phixle

ответ

2

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

+0

Большое спасибо @Hans Passant за этот очень уместный ответ! Решение не только для решения проблемы висит, но и делает мой код более элегантным! –

Смежные вопросы