C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 8 - Потеря устройств при нажатии клавиш Alt+TAB / Direct3D / Microsoft DirectX

Шаг 8 - Потеря устройств при нажатии клавиш Alt+TAB

Все мы любим переключаться между приложениями используя клавиши Alt+TAB и если Вы попытаетесь это сделать, то обратно Вам будет трудно вернуться... почему? потому, что мы это не предусмотрели... Вначале мы рассмотрим, как сделать переключение приложений, точнее восстанавливать устройство. А ниже, я расскажу что сделать с "Шаг 7 - Полноэкранный режим", чтобы он запустился в Windows98. Заходим в функцию прорисовки сцены и в самое начало (до BeginScene) добавляем код:

HRESULT hr;
hr=p_d3d_Device->TestCooperativeLevel();
if(hr==D3DERR_DEVICELOST) return;
if(hr==D3DERR_DEVICENOTRESET) p_d3d_Device->Reset(&d3dpp);

Как видите, d3dpp нужно объявить глобально, сделайте это. Функция TestCooperativeLevel() возвращает результат устройства, если устройство потеряно и не может быть восстановлено, то оно и не отображается. Если же мы не можем восстановить повторно, то все устройство обнуляем и создаем заново. Найдем в AppInit() строчку выделения буфера для вершин:

p_d3d_Device->CreateVertexBuffer (13*sizeof(CUSTOMVERTEX), 
	0, 
	D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, 
	&p_VertexBuffer);

Видите параметр D3DPOOL_DEFAULT, замените его на D3DPOOL_MANAGED - если устройство потеряно, то за счет этого флажка память выделенная под устройство не будет изменена и когда-нибудь она будет восстановлена.

Теперь, почему "Шаг 7 - Полноэкранный режим" не запускается в Windows98. Сейчас мы это выясним, попробуйте закомментировать код:

d3dpp.FullScreen_RefreshRateInHz = 100;

у Вас, конечно, может быть другое значение. Скомпилируйте и запустите. Все работает :), но лучше сделать это не так грубо... а помягче...

D3DDISPLAYMODE d3ddm;
p_d3d->GetAdapterDisplayMode (D3DADAPTER_DEFAULT, &d3ddm);

расположите ее там же, где располагали в "Шаг 2 - Создание Direct3D в оконном режиме". И к FullScreen_RefreshRateInHz присвойте d3ddm.RefreshRate. Это мы присвоили текщие Mhz, которые используются на рабочем столе, к нашему приложению. Компилируйте, запускайте и проверяйте.


Загрузить проект | | |
Автор Хавов Евгений Валерьевич.
[AD]