Как избежать сворачивания полноэкранной windows-игры в многомониторной конфигурации. (комментарии)
Это сообщение сгенерировано автоматически.
Не совсем понятно: этот код просто не даёт курсору выйти за пределы игорого экрана? Или после restore/resize не даёт курсору "рассихронизироваться" с игровым (как в oblivion, например)?
Просто лично мне до сих пор не удалось заставить fullscreen-приложение вести себя нормально на одном мониторе, когда я перевожу курсор на второй монитор и что-то там нажимаю (winamp, например :) ).
Ето для самой игръ, да.
А для разработки охота перевести на второй монитор И чтобъ игра не свернулась.
Ето можно сделать, запомнив адрес процедуръ обработки сообщений окошка перед CreateDevice(), потом после (так как Direct3D рантайм ставит свой обработчик поверх нашего) и поставить новъй обработчик, которъй в случае WM_ACTIVATEAPP просто передает сообщение нашему старому обработчику, все остальнъе - тому что после CreateDevice() взяли.
Таким образом отключаем Direct3D рантайм из обработки етого мессиджа и все работает.
~X~
просто не дает выйти за пределы экрана.
>Просто лично мне до сих пор не удалось заставить fullscreen-приложение вести себя нормально на одном мониторе, когда я перевожу курсор на второй монитор и что-то там нажимаю (winamp, например :) ).
да, еще иногда хочется быстро альттабнуться в приложение на другом монике и что-нибудь там сделать, потом вернуться и чтобы без сворачивания.
пока ни в одной fullscreen игре не видел подобного.
Z
зачем дебажить в фулскрине?
а в релизе ты применял описанный способ?
а devicelost и потеря ресурсов,может произойти в твоем способе? (я не знаю, как генерится devicelost)
напиши хинт :)
vlob
>зачем дебажить в фулскрине?
Чтобъ дебажит фулскрин. Чтобъ имея 2 монитора, воспользоватся максимально одним из них.
Device lost произходит.
Хм. Я делаю фулскрин игры для многомониторных конфигураций и у мну ничего не сворачивается при клике за пределами окна без всяких извратов... Я чего-то не так делаю?????
@!!ex
А какая версия DirectX-а?
Так вы про DX... Надо было догадаться.... я на OGL пишу. Сорри за офтом. В теме не увидел упоминания DX.
Z
>Таким образом отключаем Direct3D рантайм из обработки етого мессиджа и все работает.
А это идея! спасибо. А нет ли у кого исходника directx-обработчика окна, или типа реверса?
Кстати я правильно понимаю что в таком случае если мы переключимя например на блокнот который тоже на втором мониторе, то мы его не увидим?
мысли по теме:
Очень жаль что в координатах окон отсутствует такая величина как монитор. (Или может я лениво искал, есть функция SetWindowMonitor?).
Пару раз мне удавалось настроить т.н. "dualview", когда второй моник просто есть но десктоп на него не выводится и никакие окна не лезут. И при этом в dx его можно выбрать в полном экране и получался эксклюзивный монитор приложения. Как при этом dx договоривался с окном непонятно, может там оно просто не играет роли. (А может мне только чудится что так было, в любом случае все это постоянно в драйверах ломается).
Обычно все мониторы зашарены на десктоп. Если бы я сейчас дизайнил window manager, я бы сказал что окно должно всегда иметь координаты в "системе десктопа", независимо от временного режима монитора. Например (1280,0,2560,1024), несмотря на то что режим 1024x768. Тогда при смене режима (временного) никакие окна не передвигаюся, иконки остаются на своих местах - потому что с точки зрения десктопа ничего не изменилось. А в случае всяких кликов window manager должен проверить, не мешает ли новому активному окну это окно с полноэкранным режимом (1280,0,2560,1024), и только если мешает - выключать режим и т.п.
Но все не так :(
Тема в архиве.