Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Полноэкранный режим в Direct3D


MrAngel ©   (2005-03-20 17:55:00) 

Нашёл в интернете информацию, но всё это работает не корректно или не работает вообще.

Чую я ещё не видел более проффесионального подхода к этой проблеме. Ребята, а как вы это реализовываете?

Ответы типа поставь переменную  windowed = TRUE не принимаются. Меня интересует прежде всего работа с самим окном при переходе в полноэкранный режим и обратно. Всё это хотелось бы делать через WINAPI, а не через TFORM.


MrAngel   (2005-03-22 00:40:00) [1]

Хммююю создавать окно поверх все окон? Интересно - это вариант. Надо будет попробовать. Спасиб за наводку (RestoreDisplayMode) - будут результаты сообщу сдесь же.


Sphinx   (2005-03-21 23:24:00) [2]

Сорри.... RestoreDisplayModeэто команда основного интерфейса IDirectDraw7, забыл указать :)


Sphinx   (2005-03-21 22:48:00) [3]

Я как-то не заморачивался переключениями между оконным режимом и полноэкранным, по при работе с полноэкранным я обычно создаю WinAPI окно, а не VCL. Просто создаю окно
 APIWindow.WindowHandle := CreateWindowEx
                        (WS_EX_APPWINDOW,    // создается окно приложения
                         PChar(aWndClass),   // имя оконного класса класс
                         PChar(aWndName),    // заголовок окна
                         WS_POPUP,           // стиль окна
                         { задаются координаты верхнего левого угла }
                         aLeft,              // позиция по горизонтали
                         aTop,               // позиция по вертикали
                         { задаются параметры окна }
                         aWidth,             // ширина окна
                         aHeight,            // высота окна
                         0,                  // указатель на родительского окна
                         0,                  // указатель на меню окна
                         aHInst,             // указатель на приложение создавшее окно
                         nil);               // указатель на дополнительные параметры окна
где aLeft и aTop = нулевые, а aWidth и aHeight - размеры экрана. Только не совмещай VCL & WinAPI. А с TForm при переходе в полноэкранный режим делай следующее:
Form1.BorderStyle := bsNone;
Form1.SetBounds(0, 0, ScreenWidth, ScreenHeight);
и все "моргания" обычно изчезают. Только не забудь запомнить параметры и вернуть при смене на оконный режим :)

А по поводу смены разрешения...у DDraw есть команда возвращающая параметры экрана к исходным RestoreDisplayModeпопробуй, может поможет ? Вызывай перед освобожденим интерфейса.


MrAngel   (2005-03-21 19:45:00) [4]

Ах да забыл добавить.
Само приложение при запуске ничего не выдаст.
В меню нажмите Initialize Engine, затем Start Rendering.

И ещё. Если не сложно напишите если были какие баги и прочие нехорошести.


MrAngel   (2005-03-21 19:41:00) [5]

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


Sphinx   (2005-03-21 18:03:00) [6]

Посмотри в примерах по DirectDraw на clootie там точно был один пример переключения из полноэкранного режима в оконный (ну и наоборот соответственно) написанный на WinAPI.

Что конкретно тебе интересно?

В двух словах что понял из твоего вопроса:
1) создавай окно размерами с игровой экран, и в координатах 0, 0
2) Создавай интерфейсы DX и переключайся в полноэкранный режим
3) всё...ты получаешь окно развернутое на весь экран, и приложение работающее в полноэкранном режиме...


reticon   (2005-03-21 17:59:00) [7]

у меня под DirectDraw нормально работает...


MrAngel   (2005-03-21 17:56:00) [8]

Никто не знает? - очень жаль...


Наверх

Титульная страница Поиск, карта сайта Написать письмо