5edf7c19

NULL);


Объект DirectDraw, связанный с новой поверхностью вызван параметром lpDD. Этот метод заполняет поверхностную структуру описания &ddsd  и возвращает указатель на новую поверхность (&lpDDS).

Вызвав IDirectDraw:: CreateSurface, Вы сначала опишите vtable объекта DirectDraw, затем опишите метод из vtable. Первый параметр в методе - ссылка к объекту DirectDraw, который был создан и вызывает метод.

Чтобы иллюстрировать различие между вызовом метода объекта COM в C и C ++, тот же самый метод на C ++ показывается ниже (C ++ неявно описывает указатель и передает его):

ret = lpDD- > CreateSurface (&ddsd, &lpDDS, NULL)


Чтобы получить текущий список методов, поддерживаемых макроопределениями, см. соответствующий файл заголовка для DirectX компонента, который Вы хотите использовать.




CLSCTX_ALL,

&IID_IDirectDraw,

&lpdd);

if

(! FAILED (ddrval))

dDdrval = IDirectDraw_Initialize (lpdd, NULL);

CLSID_DirectDraw - идентификатор  DirectDraw класса объекта драйвера, и IID_IDirectDraw - интерфейса DirectDraw.lpdd - возвращенный объект DirectDraw. CoCreateInstance возвращает неинициализированный объект.

3      Прежде, чем Вы используете объект DirectDraw, Вы должны вызвать IDirectDraw:: Initialize. Этот метод берет параметр GUID драйвера, который функция DirectDrawCreate обычно использует (NULL в этом случае). Как только объект DirectDraw инициализирован, Вы можете использовать и разрушатть объект DirectDraw, как будто это было создано, используя функцию DirectDrawCreate. Если Вы не вызовете IDirectDraw::Initialize перед использованием одного из методов, связанных с объектом DirectDraw, произойдет ошибка DDERR_NOTINITIALIZED .

Перед закрытием прикладной программы, закроте COM , как показано ниже.

CoUnitialize ();






if( ddrval != DD_OK )

return;

ddrval = lpSurf->QueryInterface(

IID_IDirectDrawSurface2, (LPVOID

*)&lpSurf2);

if( ddrval != DD_OK )

return;

ddrval = lpSurf2->PageLock( 0 );

if( ddrval != DD_OK )

return;

ddrval = lpSurf2->PageUnlock( 0 );

if( ddrval != DD_OK )

return;

Интерфейс IDirectDrawSurface2 содержит все методы, обеспечиваемые интерфейсом IDirectDrawSurface, и имеет три новых метода: IDirectDrawSurface2:: GetDDInterface, IDirectDrawSurface2:: PageLock, и IDirectDrawSurface2:: PageUnlock.

Для большего количества информации относительно получения интерфейса IDirectDraw2, см. Интерфейс IDirectDraw2.




CLSCTX_ALL,

&IID_IDirectDrawClipper,

&lpClipper);

if

(!FAILED(ddrval))

ddrval = IDirectDrawClipper_Initialize(lpClipper,

lpDD, 0UL);

CLSID_DirectDrawClipper - идентификатор класса объекта DirectDrawClipper, IID_IDirectDrawClipper - в настоящее время поддерживаемый интерфейс и lpClipper - возвращенный объект ограничителя.

Ограничители, созданные механизмом  класса должны быть инициализированы  IDirectDrawClipper::Initialize прежде, чем Вы можете использовать объект. 0UL - параметр dwFlags, который в этом случае имеет значение 0, так как никакие флажки в настоящее время не поддержаны. В примере, показанном здесь, lpDD - объект DirectDraw, который обладает объект DirectDrawClipper. Однако, Вы могли бы задать NULL, который создаст независимый ограничитель (эквивалент созданию объекта DirectDrawClipper с использованием функции DirectDrawCreateClipper).

Перед закрытием прикладной программы, закройтей COM используя CoUninitialize, как показано ниже.

CoUnitialize ();




if

(FAILED(ddres))

                ...

ddres = lpDDSurface->QueryInterface(lpGuid,

&lpD3DDevice);

if

(FAILED(ddres))

                ...

Те же самые правила для счета ссылки и состояния срока службы для объектов (см. Интерфейс драйвера Direct3D ) предъявляются и к DirectDraw поверхностям и к Direct3D устройствам. Дополнительно, другие Direct3D интерфейсы устройства могут быть получены для той же самой DirectDraw поверхности. Это возможно, следовательно, одиночная DirectDraw поверхность может быть адресатом , и для ramp-основанного устройства и rgb-основанного устройства.




if

(FAILED(ddres))

                ...

ddres = lpDDSurface->QueryInterface(

IID_IDirect3DTexture, &lpD3DTexture);

if

(FAILED(ddres))

                ...

Те же самые правила для счета ссылки и состояния сроки службы, обсужденные для объектов (см. Интерфейс драйвера Direct3D ) прилагаются к текстурам Direct3D. Возможно использовать одиночный DirectDrawSurface, и как адресат представления и как текстуру.



Содержание раздела