Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Полноэкранный режим в 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
                        (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 попробуй, может поможет ? Вызывай перед освобожденим интерфейса.


 
Sphinx ©   (2005-03-21 23:24) [7]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
1-1118017641
dp200
2005-06-06 04:27
2005.06.29
OpenDialog , открытие нескольких файлов


3-1116850425
Надежда
2005-05-23 16:13
2005.06.29
Не срабатывает установка DisplayFormat полю ClientDataSet


1-1117806282
fagot
2005-06-03 17:44
2005.06.29
Побудка


1-1118216188
Чапаев
2005-06-08 11:36
2005.06.29
Action Manager & Access Violation


3-1116437553
Гость2
2005-05-18 21:32
2005.06.29
Прошлая и следущая запись таблицы.