Форум: "Игры";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизПолноэкранный режим в Direct3D Найти похожие ветки
← →
MrAngel (2005-03-20 17:55) [0]Нашёл в интернете информацию, но всё это работает не корректно или не работает вообще.
Чую я ещё не видел более проффесионального подхода к этой проблеме. Ребята, а как вы это реализовываете?
Ответы типа поставь переменную windowed = TRUE не принимаются. Меня интересует прежде всего работа с самим окном при переходе в полноэкранный режим и обратно. Всё это хотелось бы делать через WINAPI, а не через TFORM.
← →
MrAngel (2005-03-21 17:56) [1]Никто не знает? - очень жаль...
← →
reticon © (2005-03-21 17:59) [2]у меня под DirectDraw нормально работает...
← →
Sphinx © (2005-03-21 18:03) [3]Посмотри в примерах по DirectDraw на clootie там точно был один пример переключения из полноэкранного режима в оконный (ну и наоборот соответственно) написанный на WinAPI.
Что конкретно тебе интересно?
В двух словах что понял из твоего вопроса:
1) создавай окно размерами с игровой экран, и в координатах 0, 0
2) Создавай интерфейсы DX и переключайся в полноэкранный режим
3) всё...ты получаешь окно развернутое на весь экран, и приложение работающее в полноэкранном режиме...
← →
MrAngel (2005-03-21 19:41) [4]Sphinx © ...
Ах вот почему небыло ответов.
Короче вот какая проблема. Да всё как бы работает. Всё показывает и в оконном режиме и в полноэкранном, НО !!!
1. При переходе с полноэкранного режима есть проблема. Заключается она в том, что если в полном экране было скажем 320*240, а в оконном - 1024*768, то абсолютно все окна уменьшаются в размерах.
Ну допустим какой нибудь там Explorer был открыт на весь экран. Меняем режим на Full SCreen и затем обратно (разрешения я уже указал). В результате наш Explorer имеет width=320 и height=240 и причём снопки в его заголовке говорят, что окно развёрнуто.
2. Следующая проблема. Почему в полно экранном режиме не отключается перерисовка у всех окон? Весьмя не интересно наблюдась как на моей картинке вдруг начинает моргать окно. Да - знаю выход есть - сделать своё окно на весь экран. Тогда вопрос как мне ето сделать через API даже если я работаю через TFORM. Просто приведите примерный список функций а дальше уж я сам разберусь.
3. Далее. Скажем вторую проблему я решил. Но вот блин а ?!!! моргают всякие там Task Bar"s - как бы их мне временно отключить?
4. Проблема перехода из полноэкранного в оконный режим, когда надо восстанавливать как окно приложения так и остальные окна.
Кидаю вам ссылку своего приложения. Просто понажимайте Alt+Enter для переключения режимов. Сами всё увидите.
http://www.hot.ee/delphi1/test.rar
← →
MrAngel (2005-03-21 19:45) [5]Ах да забыл добавить.
Само приложение при запуске ничего не выдаст.
В меню нажмите Initialize Engine, затем Start Rendering.
И ещё. Если не сложно напишите если были какие баги и прочие нехорошести.
← →
Sphinx © (2005-03-21 22:48) [6]Я как-то не заморачивался переключениями между оконным режимом и полноэкранным, по при работе с полноэкранным я обычно создаю WinAPI окно, а не VCL. Просто создаю окно
APIWindow.WindowHandle := CreateWindowEx
где aLeft и aTop = нулевые, а aWidth и aHeight - размеры экрана. Только не совмещай VCL & WinAPI. А с TForm при переходе в полноэкранный режим делай следующее:
(WS_EX_APPWINDOW, // создается окно приложения
PChar(aWndClass), // имя оконного класса класс
PChar(aWndName), // заголовок окна
WS_POPUP, // стиль окна
{ задаются координаты верхнего левого угла }
aLeft, // позиция по горизонтали
aTop, // позиция по вертикали
{ задаются параметры окна }
aWidth, // ширина окна
aHeight, // высота окна
0, // указатель на родительского окна
0, // указатель на меню окна
aHInst, // указатель на приложение создавшее окно
nil); // указатель на дополнительные параметры окнаForm1.BorderStyle := bsNone;
и все "моргания" обычно изчезают. Только не забудь запомнить параметры и вернуть при смене на оконный режим :)
Form1.SetBounds(0, 0, ScreenWidth, ScreenHeight);
А по поводу смены разрешения...у DDraw есть команда возвращающая параметры экрана к исходным RestoreDisplayMode попробуй, может поможет ? Вызывай перед освобожденим интерфейса.
← →
Sphinx © (2005-03-21 23:24) [7]Сорри....RestoreDisplayMode это команда основного интерфейса IDirectDraw7, забыл указать :)
← →
MrAngel (2005-03-22 00:40) [8]Хммююю создавать окно поверх все окон? Интересно - это вариант. Надо будет попробовать. Спасиб за наводку (RestoreDisplayMode) - будут результаты сообщу сдесь же.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.048 c