返回显示模式:DrvGetModes

显示驱动程序还必须支持 DrvGetModes。 此函数为 GDI 提供指向 DEVMODEW 结构数组的指针。 结构定义它支持的各种模式的显示属性,包括以像素和毫米为单位的维度 () 、平面数、每平面位数、颜色信息等。

调用 DrvGetModes 函数时,驱动程序将可用显示模式写入内存的顺序可能会影响 Windows 选择的最终显示模式。 通常,如果应用程序未指定默认模式,系统会在驱动程序提供的列表中选择第一个匹配模式。

例如,假设当前显示模式为

800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_CENTER

驱动程序指定可用显示模式的列表,如下所示:

模式 模式详细信息
A 600x800x32bpp@60Hz DMDO_270 DMDFO_STRETCH
B 600x800x32bpp@60Hz DMDO_90 DMDFO_STRETCH
C 600x800x32bpp@60Hz DMDO_90 DMDFO_CENTER
D 600x800x32bpp@60Hz DMDO_270 DMDFO_CENTER
  • Case 1

    如果应用程序尝试将监视器设置为600x800x32bpp@60Hz,但 DEVMODEWdmFields 成员中未设置DM_DISPLAYORIENTATION和DM_DISPLAYFIXEDOUTPUT标志,则系统必须选择方向和固定输出模式。 在这种情况下,系统将选择显示模式 C ,因为它是与当前DMDFO_CENTER设置匹配的第一个列出的模式。

  • Case 2

    如果应用程序尝试将监视器设置为600x800x32bpp@60Hz DMDFO_STRETCH,系统将选择显示模式 A

  • 案例 3

    如果应用程序尝试将监视器设置为600x800x32bpp@60Hz DMDO_270,系统将选择显示模式 D

  • 案例 4

    如果应用程序尝试将监视器设置为 600x800x32bpp@60Hz DMDO_DEFAULT,则系统将无法找到可接受的匹配项。

一个例外适用于这些规则:当系统查找显示方向的匹配项,并且未指定方向且无法匹配当前模式时,系统将给予DMDO_DEFAULT优先于其他显示方向。

例如,假设当前显示模式为

600x800x32bpp@60Hz DMDO_90 DMDFO_STRETCH

驱动程序指定可用显示模式的列表,如下所示:

模式 模式详细信息
A 800x600x32bpp@60Hz DMDO_180 DMDFO_CENTER
B 800x600x32bpp@60Hz DMDO_180 DMDFO_STRETCH
C 800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_CENTER
D 800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_STRETCH

在这种情况下,如果应用程序尝试将监视器设置为800x600x32bpp@60Hz,系统将选择显示模式 D