Platform SDK: DirectX

IDirectDraw7::StartModeTest

The IDirectDraw7::StartModeTest method initiates a test to update the system registry with refresh rate information for the current display adapter and monitor combination. A call to this method is typically followed by calls to IDirectDraw7::EvaluateMode to pass or fail modes displayed by the test.

HRESULT StartModeTest(
  LPSIZE   lpModesToTest,
  DWORD    dwNumEntries, 
  DWORD    dwFlags
);

Parameters

lpModesToTest
A pointer to an array of SIZE elements describing, in terms of screen resolutions, the modes that should be tested.
dwNumEntries
The number of elements in the array pointed to by lpModesToTest.
dwFlags
The only flag value that is valid at present is DDSMT_ISTESTREQUIRED. When this flag is specified, IDirectDraw7::StartModeTest will not initiate a test, but will instead return a value indicating whether it is possible or necessary to test the resolutions identified by lpModesToTest and dwNumEntries.

Return Values

If the method succeeds, the return value is DD_OK.

If it fails, the method can return one of the following error values:

DDERR_CURRENTLYNOTAVAIL
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_NOEXCLUSIVEMODE
DDERR_NOTFOUND
DDERR_TESTFINISHED

When the method is called with the DDSMT_ISTESTREQUIRED flag, it can return one of the following values:

DDERR_NEWMODE
DDERR_NODRIVERSUPPORT
DDERR_NOMONITORINFORMATION
DDERR_TESTFINISHED

Remarks

The IDirectDraw7::StartModeTest method can be used in conjunction with the IDirectDraw7::EvaluateMode method to determine the maximum refresh rate that an EDID monitor and display adapter combination can support for each screen resolution. The results of the testing are stored in the system registry and affect the operation of IDirectDraw7::EnumDisplayModes when that method is called with the DDEDM_REFRESHRATES flag set.

Specifically, a call to IDirectDraw7::StartModeTest directs DirectDraw to establish a set of testable resolutions and to display a mode based on the first resolution in the set. Subsequent calls to IDirectDraw7::EvaluateMode can be used to pass or fail each mode and to advance the test to the next display mode.

This method will only succeed with monitors that contain EDID data. If the monitor is not EDID-compliant, then the method will return DDERR_TESTFINISHED without testing any modes. If the EDID table does not contain values higher than 60 Hz, no modes will be tested. Refresh rates higher than 100 Hz will only be tested if the EDID table contains values higher than 85 Hz.

Calling the method with an argument list of (NULL, 0, 0) will clear existing refresh rate information from the registry.

The test will not guarantee to display only the resolutions in the array described by the lpModesToTest and dwNumEntries parameters. For example, the 640×480 resolution is used to obtain a maximum viewable refresh rate for the 320×200 resolution.

Requirements

  Windows NT/2000: Requires Windows 2000.
  Windows 95/98: Requires Windows 98.
  Header: Declared in ddraw.h.

See Also

IDirectDraw7::EvaluateMode, Refresh Rate Enumeration