DirectX / Windows: невозможно сосредоточиться на диспетчере задач при принудительном закрытии приложения

Этот вопрос может свидетельствовать о фундаментальном непонимании программирования DirectX в Windows, но у меня возникла небольшая проблема, которую я не могу понять. Моя программа при работе в полноэкранном режиме иногда попадает в странное состояние, и мне приходится принудительно закрыть приложение (CTRL + ALT + DEL).

Проблема в том, что когда я нажимаю CTRL + ALT + DEL, появляется диспетчер задач, но я не могу использовать мышь; клавиатура сначала работает, но если я щелкну мышью по окну диспетчера задач, она теряет фокус, и я больше не могу восстановить фокус. Приложение также не сворачивается (проблема с программированием приложения для Windows?)

Возможно ли, что мое приложение крадет исключительное владение мышью? Я использую DirectInput, но ввод с помощью мыши вообще не обрабатывается приложением. Кроме того, эта проблема возникает только при запуске приложения в полноэкранном режиме. Если я запустил его в окне, все в порядке.

Если это важно, я использую MS Visual Studio 12, Windows 8 и DirectX 9.


person 8bitcartridge    schedule 24.03.2013    source источник


Ответы (1)


Решением было отменить захват всех устройств ввода и остановить процедуры рендеринга, когда фокус был потерян из приложения. Я просто настраиваю приложение, чтобы отслеживать, находится ли оно в фокусе, и соответствующим образом настраивать значение в насосе сообщений Windows для соответствующих сообщений. В частности, я устанавливаю фокус на «выключено», когда получаю следующие сообщения:

WM_SIZE (когда wParam = SIZE_MINIMIZED), WM_KILLFOCUS, WM_ENTERSIZEMOVE и WM_ENTERMENULOOP

Я снова переключил фокус на следующие сообщения:

WM_SIZE (все остальные случаи), WM_SETFOCUS, WM_EXITSIZEMOVE, WM_ACTIVATEAPP с wParam, установленным в значение true, и WM_EXITMENULOOP

WM_KILLFOCUS подходит для решения проблемы удаления ALT-CTRL-DELETE из приложения.

person 8bitcartridge    schedule 15.06.2013