返回显示模式: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,但 DEVMODEW 的 dmFields 成员中未设置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。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈