SURFOBJ 结构 (winddi.h)

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

语法

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

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

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 发送特定于设备的格式。 支持的预定义格式包括:

含义
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,并且是标准的未压缩格式位图,则可以设置以下标志。 否则,应忽略此成员。

含义
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

要求

要求
Header winddi.h (包括 Winddi.h)