Estructura SURFOBJ (winddi.h)

La estructura SURFOBJ es el objeto de usuario de una superficie. Normalmente, un controlador de dispositivo llama a métodos en un objeto surface solo cuando el objeto surface representa un mapa de bits GDI o una superficie administrada por el dispositivo.

Sintaxis

typedef struct _SURFOBJ {
  DHSURF dhsurf;
  HSURF  hsurf;
  DHPDEV private_dhpdev;
  HDEV   private_hdev;
  DHPDEV dhpdev;
  HDEV   hdev;
  SIZEL  sizlBitmap;
  ULONG  cjBits;
  PVOID  pvBits;
  PVOID  pvScan0;
  LONG   lDelta;
  ULONG  iUniq;
  ULONG  iBitmapFormat;
  USHORT iType;
  USHORT fjBitmap;
} SURFOBJ;

Miembros

dhsurf

Identificador de una superficie, siempre que la superficie esté administrada por el dispositivo. De lo contrario, este miembro es cero.

hsurf

Identificador de la superficie.

private_dhpdev

private_hdev

dhpdev

Identifica el PDEV del dispositivo asociado a la superficie especificada.

hdev

Identificador lógico de GDI para el PDEV asociado a este dispositivo.

sizlBitmap

Especifica una estructura SIZEL que contiene el ancho y alto, en píxeles, de la superficie. La estructura SIZEL es idéntica a la estructura SIZE .

cjBits

Especifica el tamaño del búfer al que apunta pvBits.

pvBits

Si la superficie es un mapa de bits de formato estándar, se trata de un puntero a los píxeles de la superficie. Para BMF_JPEG o BMF_PNG imágenes, se trata de un puntero a un búfer que contiene los datos de imagen en un formato JPEG o PNG. De lo contrario, este miembro es NULL.

pvScan0

Puntero a la primera línea de examen del mapa de bits. Si iBitmapFormat es BMF_JPEG o BMF_PNG, este miembro es NULL.

lDelta

Especifica el recuento de bytes necesarios para bajar una línea de examen en el mapa de bits. Si iBitmapFormat es BMF_JPEG o BMF_PNG, este miembro es NULL.

iUniq

Especifica el estado actual de la superficie especificada. Cada vez que cambia la superficie, este valor se incrementa. Esto permite a los controladores almacenar en caché las superficies de origen.

Para una superficie que no se debe almacenar en caché, iUniq se establece en cero. Este valor se usa junto con la marca BMF_DONTCACHE de fjBitmap.

iBitmapFormat

Especifica el formato estándar que coincide más estrechamente con esta superficie. Si el miembro iType especifica un mapa de bits (STYPE_BITMAP), este miembro especifica su formato. Los sistemas operativos basados en NT admiten un conjunto de formatos predefinidos, aunque las aplicaciones también pueden enviar formatos específicos del dispositivo mediante SetDIBitsToDevice. Entre los formatos predefinidos admitidos se incluyen los siguientes:

Valor Significado
BMF_1BPP 1 bit por píxel.
BMF_4BPP 4 bits por píxel.
BMF_8BPP 8 bits por píxel.
BMF_16BPP 16 bits por píxel.
BMF_24BPP 24 bits por píxel.
BMF_32BPP 32 bits por píxel.
BMF_4RLE 4 bits por píxel, longitud de ejecución codificada.
BMF_8RLE 8 bits por píxel, longitud de ejecución codificada.
BMF_JPEG Imagen comprimida JPEG.
BMF_PNG Imagen comprimida png.

iType

Tipo de superficie, que es uno de los siguientes:

Tipo Definición
STYPE_BITMAP La superficie es un mapa de bits.
STYPE_DEVBITMAP La superficie es un mapa de bits de formato de dispositivo.
STYPE_DEVICE El dispositivo administra la superficie.

fjBitmap

Si la superficie es de tipo STYPE_BITMAP y es un mapa de bits de formato sin comprimir estándar, se pueden establecer las marcas siguientes. De lo contrario, se debe omitir este miembro.

Valor Significado
BMF_DONTCACHE El controlador no debe almacenar en caché el mapa de bits porque es un mapa de bits transitorio, creado por GDI, que el controlador nunca volverá a ver. Si se establece esta marca, el miembro iUniq de esta estructura se establecerá en 0.
BMF_KMSECTION Solo se usa en GDI y el controlador debe omitirlo.
BMF_NOTSYSMEM El mapa de bits no está en la memoria del sistema. EngModifySurface establece esta marca cuando mueve un mapa de bits a la memoria de vídeo.
BMF_NOZEROINIT El mapa de bits no se inicializó en cero.
BMF_TOPDOWN La primera línea de examen representa la parte superior del mapa de bits.
BMF_WINDOW_BLT GDI establece esta marca para notificar al controlador de una ventana moverse de una ubicación de pantalla a otra.

Comentarios

Cuando un controlador necesita información sobre una superficie determinada, el controlador debe tener acceso al SURFOBJ. Esta estructura permite el acceso rápido a las propiedades de la superficie.

Cuando una estructura SURFOBJ representa un mapa de bits GDI, el controlador debe ser capaz de determinar el formato del mapa de bits y localizar los bits de mapa de bits.

Cuando una estructura SURFOBJ representa una superficie de dispositivo, el controlador debe poder localizar el identificador del dispositivo para la superficie.

Para obtener más información sobre cómo admitir imágenes comprimidas JPEG y PNG, consulte DEVINFO.

Requisitos

Requisito Valor
Header winddi.h (incluya Winddi.h)