DDSCL_NORMAL);
if
(ddrval!= DD_OK)
return;
Ddrval = lpDD- > QueryInterface (IID_IDirectDraw2,
(LPVOID *) &lpDD2);
if
(ddrval!= DD_OK)
return;
Ddscaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
Ddrval = lpDD2- > GetAvailableVidMem (&ddscaps, &total,
&free);
if
(ddrval!= DD_OK)
return;
Этот пример показывает синтаксис С++ для создания интерфейса IDirectDraw, который затем использует метод IDirectDraw:: QueryInterface, чтобы создать интерфейс IDirectDraw2. Этот интерфейс содержит метод IDirectDraw2:: GetAvailableVidMem. Попытка использовать этот метод из интерфейса IDirectDraw кончится ошибкой компиляции.
В дополнение к методу IDirectDraw2:: GetAvailableVidMem , интерфейс IDirectDraw2 содержит все методы, обеспечиваемые в интерфейсе IDirectDraw. В этот интерфейс включены новые методы IDirectDraw2:: SetDisplayMode и IDirectDraw2:: EnumDisplayModes , которые позволяют определить частоты регенерации экрана. Если частоты регенерации не требуются, то можно использовать методы IDirectDraw:: SetDisplayMode и IDirectDraw:: EnumDisplayModes .
Взаимодействие между IDirectDraw:: SetCooperativeLevel и IDirectDraw:: SetDisplayMode немного отлично чем между IDirectDraw2:: SetCooperativeLevel и IDirectDraw2:: SetDisplayMode. Если Вы используете интерфейс IDirectDraw, и прикладная программа получает исключительный режим, вызывая IDirectDraw:: SetCooperativeLevel с флажком DDSCL_EXCLUSIVE, изменяет режим используя IDirectDraw:: SetDisplayMode, затем отменяет исключительный режим, вызывая IDirectDraw:: SetCooperativeLevel с флажком DDSCL_NORMAL, первоначальный режим дисплея не будет восстановлен. Новый режим дисплея останется до вызова из прикладной программы метода IDirectDraw:: RestoreDisplayMode или удаления объекта DirectDraw. Однако, если Вы используете интерфейс IDirectDraw2, и прикладная программа пройдет теми же самыми шагами, первоначальный режим дисплея будет восстановлен, когда потеряет исключительный режим .