Вы пытались отключить хук DXGI?
IDXGISwapChain::MakeWindowAssociation( DXGI_MWA_NO_WINDOW_CHANGES )
Кроме того, создание цепочки обмена с DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH
приведет к тому, что DXGI найдет режим отображения, наиболее соответствующий размеру вашего окна. Если вы уже изменили ResizeTarget () на 640x480, и доступен хотя бы какой-то режим 640x480, вы должны его получить. Затем вы получите WM_SIZE до 640x480, что дает вам возможность вызвать ResizeBuffers. если ResizeBuffers вызывается так, то после переключения режима он включит перелистывание страниц (новые обратные буферы должны быть связаны с монитором, или система не может напрямую переворачивать страницы). Если перелистывание страниц не включено таким образом, то все вызовы Present будут вызывать операцию blt, которая будет высасывать пропускную способность, которую вам не нужно тратить.
Обратите внимание, что вы можете или не можете получить 640x480. Например, если повернуть дисплей, вы получите следующий самый большой режим, который будет содержать 640x480, который, вероятно, будет 768x1024. Если вы хотите хорошо работать на повернутых дисплеях, вы можете следить за этим и самим использовать почтовый ящик с соотношением сторон 4x3.
Но, как правило, лучше разрешить DXGI выбирать режим отображения, потому что есть много причин, по которым режим рабочего стола может быть лучшим. Пользователь мог подключить компьютер к проектору, который может работать только в одном режиме. Некоторые ЖК-дисплеи отображают разрешение 640x480 в собственном разрешении, то есть маленькую почтовую марку в центре монитора. В идеале, вы должны написать свое приложение, чтобы оно выглядело практически при любом разрешении, но, по крайней мере, с соотношением сторон 4x3, 3x4, 6x9 и 9x6.
Удачного кодирования
-Джефф