Данная структура используется для работы с поверхностями и обмена информации в DirectDraw. Часть полей заполняется перед вызовом функций, в части полей возвращается информация для Вас. Давайте объявим эту структуру в нашем классе и рассмотрим ее поля. При использовании структуры для создания поверхности ее нужно инициализировать. В VC и VB используются разные структуры то есть разновидности одной структуры.
Visual Basic Описание структуры
Добавим описание переменной структуры в проект и произведем инициализацию. При использовании в VB инициализировать созданную структуру не нужно. Достаточно просто объявить.
Описание структуры
Добавим описание переменной структуры в проект и произведем инициализацию. В VC++ необходимо заполнить структуру нулями и указать ее размер.
Visual C++
Visual Basic
Type DDSURFACEDESC2
ddckCKDestBlt As DDCOLORKEY 'Цветовой ключ приемника при копировании.
ddckCKDestOverlay As DDCOLORKEY 'Цветовой ключ приемника при наложении.
ddckCKSrcBlt As DDCOLORKEY 'Цветовой ключ источника при копировании.
ddckCKSrcOverlay As DDCOLORKEY 'Цветовой ключ источника при наложении.
ddpfPixelFormat As DDPIXELFORMAT 'Описание формата пикселя поверхности.
ddsCaps As DDSCAPS2 'Возможности поверхности.
lAlphaBitDepth As Long 'Глубина альфа буфера.
lBackBufferCount As Long 'Количество запрашиваемых вторичных буферов.
lFlags As CONST_DDSURFACEDESCFLAGS 'Флаги информации в полях.
lHeight As Long 'Высота поверхности.
lLinearSize As Long 'Размер буфера. В настоящее время возвращается только для сжатых
'текстур поверхностей.
lMipMapCount As Long 'Число уровней mipmap.
lPitch As Long 'Расстояние до начала следующей строки.
lRefreshRate As Long 'Частота регенерации
lTextureStage As Long 'Текстуры аппаратных средств.
lWidth As Long 'Ширина поверхности.
lZBufferBitDepth As Long 'Глубина z-буфера.
End Type
Private strsurf As DDSURFACEDESC2
Private objDirectX As DirectX7
Private objDirectDraw As DirectDraw7
Public Function SetMode640_480_8() As Boolean
.......................
Visual C++
typedef struct _DDSURFACEDESC
{
DWORD dwSize; //Размер структуры.
DWORD dwFlags; //Флаги информации в полях.
DWORD dwHeight; //Высота поверхности.
DWORD dwWidth; //Ширина поверхности.
union
{
LONG lPitch; //Расстояние до начала следующей строки.
DWORD dwLinearSize; //Размер буфера. В настоящее время возвращается только
//для сжатых текстур поверхностей.
};
DWORD dwBackBufferCount; //Количество запрашиваемых вторичных буферов.
union
{
DWORD dwMipMapCount; //Число уровней mipmap.
DWORD dwZBufferBitDepth; //Глубина z-буфера.
DWORD dwRefreshRate; //Частота регенерации
};
DWORD dwAlphaBitDepth; //Глубина альфа буфера.
DWORD dwReserved;
LPVOID lpSurface; //Адрес связанной памяти
DDCOLORKEY ddckCKDestBlt; //Цветовой ключ приемника при копировании.
DDCOLORKEY ddckCKSrcOverlay; //Цветовой ключ источника при наложении.
DDCOLORKEY ddckCKSrcBlt; //Цветовой ключ источника при копировании.
DDPIXELFORMAT ddpfPixelFormat; //Описание формата пикселя поверхности.
DDSCAPS ddsCaps; //Возможности поверхности.
} DDSURFACEDESC, FAR* LPDDSURFACEDESC;
class CDirectDraw
{
public:
BOOL SetMode640_480_8();
............
DDSURFACEDESC strsurf;
};
CDirectDraw::CDirectDraw()
{
lpDD=NULL;
memset(&strsurf,0,sizeof(DDSURFACEDESC));
strsurf.dwSize = sizeof(DDSURFACEDESC);
}