Шаг 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, которые используются на рабочем столе, к нашему приложению. Компилируйте, запускайте и проверяйте.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Хавов Евгений Валерьевич - 10.08.2002