【发布时间】:2015-06-15 17:45:14
【问题描述】:
我正在开发一个非常大的程序,该程序调用 ChangeDisplaySettingsEx 以更改显示器的布局/分辨率。
我遇到了一些问题,这些调用有时有效,有时无效,我无法确定导致失败的原因。
每当它失败时,我都会得到一个返回码 -1,它对应于 DISP_CHANGE_FAILED,这显然不是很具有描述性。
我想知道是否有更好的方法来调试调用结果,以便我知道是什么导致它失败?
【问题讨论】:
我正在开发一个非常大的程序,该程序调用 ChangeDisplaySettingsEx 以更改显示器的布局/分辨率。
我遇到了一些问题,这些调用有时有效,有时无效,我无法确定导致失败的原因。
每当它失败时,我都会得到一个返回码 -1,它对应于 DISP_CHANGE_FAILED,这显然不是很具有描述性。
我想知道是否有更好的方法来调试调用结果,以便我知道是什么导致它失败?
【问题讨论】:
“我想知道是否有更好的方法来调试调用结果,以便我知道是什么导致它失败?”
您可以尝试按照reference documentation 中的建议事先查询实际显示功能:
备注
“要确保传递给 ChangeDisplaySettingsEx 的 DEVMODE 结构有效且仅包含显示驱动程序支持的值,请使用 EnumDisplaySettings 函数返回的 DEVMODE。”
这样做后,您可以将返回的DEVMODE 与您尝试作为设置传递的内容进行比较。
【讨论】:
ChangeDisplaySettingsEx() 之前,您是否尝试过记录DEVMODE 的内容?也许你真的传递了一个无效/不受支持的DEVMODE,只是没有意识到。