SURFOBJ 结构 (winddi.h)

SURFOBJ 结构是图面的用户对象。 设备驱动程序通常仅在 Surface 对象表示 GDI 位图或 设备管理的图面时调用图面上的方法。

语法

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;

成员

dhsurf

如果图面是设备管理的,则图面的句柄。 否则,此成员为零。

hsurf

图面的句柄。

private_dhpdev

private_hdev

dhpdev

标识与指定图面关联的设备的 PDEV

hdev

GDI 与此设备关联的 PDEV 的逻辑句柄。

sizlBitmap

指定一个 SIZEL 结构,该结构包含图面的宽度和高度(以像素为单位)。 SIZEL 结构与 SIZE 结构相同。

cjBits

指定 pvBits 指向的缓冲区的大小。

pvBits

如果图面是标准格式位图,则这是指向图面像素的指针。 对于BMF_JPEG或BMF_PNG图像,这是指向包含 JPEG 或 PNG 格式的图像数据的缓冲区的指针。 否则,此成员为 NULL

pvScan0

指向位图的第一个扫描行的指针。 如果 iBitmapFormat 是BMF_JPEG或BMF_PNG,则此成员为 NULL

lDelta

指定在位图中向下移动一个扫描行所需的字节计数。 如果 iBitmapFormat 是BMF_JPEG或BMF_PNG,则此成员为 NULL

iUniq

指定指定图面的当前状态。 每次图面更改时,此值都会递增。 这使驱动程序能够缓存源图面。

对于不应缓存的图面, iUniq 设置为零。 此值与 fjBitmap 的 BMF_DONTCACHE 标志结合使用。

iBitmapFormat

指定最接近此图面的标准格式。 如果 iType 成员指定位图 (STYPE_BITMAP) ,则此成员指定其格式。 基于 NT 的操作系统支持一组预定义格式,尽管应用程序还可以使用 SetDIBitsToDevice 发送特定于设备的格式。 支持的预定义格式包括:

Value 含义
BMF_1BPP 每个像素 1 位。
BMF_4BPP 每个像素 4 位。
BMF_8BPP 每个像素 8 位。
BMF_16BPP 每个像素 16 位。
BMF_24BPP 每个像素 24 位。
BMF_32BPP 每个像素 32 位。
BMF_4RLE 每个像素 4 位,运行长度编码。
BMF_8RLE 每个像素 8 位,运行长度编码。
BMF_JPEG JPEG 压缩图像。
BMF_PNG PNG 压缩图像。

iType

图面类型,这是以下项之一:

类型 定义
STYPE_BITMAP 图面是位图。
STYPE_DEVBITMAP 图面是设备格式位图。
STYPE_DEVICE 图面由设备管理。

fjBitmap

如果图面的类型为 STYPE_BITMAP,并且是标准的未压缩格式位图,则可以设置以下标志。 否则,应忽略此成员。

Value 含义
BMF_DONTCACHE 该位图不应由驱动程序缓存,因为它是由 GDI 创建的暂时位图,驱动程序永远不会再看到该位图。 如果设置了此标志,则此结构的 iUniq 成员将设置为 0。
BMF_KMSECTION 仅供 GDI 使用,驱动程序应忽略。
BMF_NOTSYSMEM 位图不在系统内存中。 EngModifySurface 在将位图移动到视频内存中时设置此标志。
BMF_NOZEROINIT 位图未初始化为零。
BMF_TOPDOWN 第一个扫描行表示位图的 顶部
BMF_WINDOW_BLT GDI 设置此标志,以通知驱动程序将窗口从一个屏幕位置移动到另一个屏幕位置。

注解

驱动程序需要有关特定图面的信息时,驱动程序必须访问 SURFOBJ。 此结构允许快速访问图面的属性。

当 SURFOBJ 结构表示 GDI 位图时,驱动程序必须能够确定位图的格式并找到位图位。

当 SURFOBJ 结构表示设备图面时,驱动程序必须能够找到图面的设备句柄。

有关支持 JPEG 和 PNG 压缩映像的详细信息,请参阅 DEVINFO

要求

   
标头 winddi.h (包括 Winddi.h)