Какая функция вызывается при нажатии Alt-Enter?

У меня есть игровое приложение, которое может переходить в полноэкранный режим и обратно в оконный режим при нажатии Alt-Enter. Однако, когда он переходит в полноэкранный режим, я получаю следующее предупреждение от DirectX:

DXGI Warning: IDXGISwapChain::Present: Fullscreen presentation inefficiencies incurred due to application not using IDXGISwapChain::ResizeBuffers appropriately, specifying a DXGI_MODE_DESC not available in IDXGIOutput::GetDisplayModeList, or not using DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH.

Я уже исключил две вторые возможности с помощью тестирования, поэтому я знаю, что единственными оставшимися причинами появления предупреждения являются либо неправильное использование IDXGISwapChain::ResizeBuffers, либо просто ошибка Windows. Поскольку я не могу отладить вторую возможность, я придерживаюсь проблемы ResizeBuffers. Чтобы отладить это, я хочу посмотреть, что происходит, когда Alt-Enter нажимается при переходе из оконного режима в полноэкранный. Однако приложение, похоже, не вызывает мой метод ResizeDXGIBuffers; на самом деле, кажется, что Alt-Enter где-то встроен в windows или DirectX, и я не знаю, как найти цепочку вызовов функций, которые срабатывают при его нажатии. РЕДАКТИРОВАТЬ: Когда мой метод помещается в обработчик WM_ACTIVATEAPP, он вызывается, но это не то, что я имел в виду. Если я уберу его из этого обработчика сообщений, окно ВСЕ ЕЩЕ перейдет в полноэкранный режим, хотя я не вызываю никаких функций, чтобы сделать окно полноэкранным. Таким образом, Alt+Enter должен автоматически вызывать какую-то внутреннюю функцию для этого.

Итак, вот мой вопрос: кто-нибудь знает, какая функция вызывается Windows и / или DirectX 11 при нажатии Alt-Enter?

РЕДАКТИРОВАТЬ: Как говорят теги для этого вопроса, я использую DirectX 11 на компьютере с Windows. В частности, Windows 7 64-разрядная.

РЕДАКТИРОВАТЬ 2: теперь я полностью съедаю нажатие клавиши Alt+Enter и вручную сохраняю состояние нажатия Alt+Enter, чтобы точно знать, что вызывается только мой код. Однако предупреждение, о котором я говорил выше, сохраняется. Я следую рекомендациям MSDN. тоже, так что я не знаю, что делать дальше.


person Darkhydro    schedule 17.12.2011    source источник
comment
msdn.microsoft. com/en-us/library/windows/desktop/   -  person Hans Passant    schedule 11.01.2012


Ответы (2)


Попробуйте обработать WM_ACTIVATEAPP сообщение.

Я не знаю, какую структуру вы используете для создания своих окон, поэтому я не могу сказать, как конкретно обрабатывать это сообщение.

person user1071136    schedule 17.12.2011
comment
извините, это не то, что я ищу. Я уже обрабатываю это сообщение. Определенно есть встроенный вызов, который изменяет размер моего окна, не делая этого вручную. - person Darkhydro; 17.12.2011

После просмотра страницы лучших практик MSDN и переделки моего кода, чтобы отразить все описанные методы, предупреждение исчезло. Я надеюсь, что это поможет любому, у кого есть такая же проблема.

Также спасибо Хансу Пассанту за ссылку. Я уже исправил это к тому времени, когда вы опубликовали это, но все равно спасибо.

person Darkhydro    schedule 18.01.2012