11 #define WIN32_LEAN_AND_MEAN
15 #define COMPILE_MULTIMON_STUBS
24 numDisplays = ::GetSystemMetrics(SM_CMONITORS);
28 static BOOL
get_dd(DWORD d, DISPLAY_DEVICE *dd)
30 dd->cb =
sizeof(DISPLAY_DEVICE);
31 return ::EnumDisplayDevices(
NULL, d, dd, 0);
44 DISPLAY_DEVICE display_device;
45 if (!
get_dd(display, &display_device))
50 while (::EnumDisplaySettings(display_device.DeviceName, numSettings, &dm)) {
60 DISPLAY_DEVICE display_device;
61 if (!
get_dd(display, &display_device))
66 if (::EnumDisplaySettings(display_device.DeviceName, index, &dm)) {
67 #ifdef WITH_GHOST_DEBUG
68 printf(
"display mode: width=%d, height=%d, bpp=%d, frequency=%d\n",
72 dm.dmDisplayFrequency);
74 setting.
xPixels = dm.dmPelsWidth;
75 setting.
yPixels = dm.dmPelsHeight;
76 setting.
bpp = dm.dmBitsPerPel;
88 setting.
frequency = dm.dmDisplayFrequency;
106 DISPLAY_DEVICE display_device;
107 if (!
get_dd(display, &display_device))
114 while (::EnumDisplaySettings(display_device.DeviceName, i++, &dm)) {
115 if ((dm.dmBitsPerPel == match.
bpp) && (dm.dmPelsWidth == match.
xPixels) &&
116 (dm.dmPelsHeight == match.
yPixels) && (dm.dmDisplayFrequency == match.
frequency)) {
129 #ifdef WITH_GHOST_DEBUG
130 printf(
"display change: Requested settings:\n");
131 printf(
" dmBitsPerPel=%d\n", dm.dmBitsPerPel);
132 printf(
" dmPelsWidth=%d\n", dm.dmPelsWidth);
133 printf(
" dmPelsHeight=%d\n", dm.dmPelsHeight);
134 printf(
" dmDisplayFrequency=%d\n", dm.dmDisplayFrequency);
137 LONG status = ::ChangeDisplaySettings(&dm, CDS_FULLSCREEN);
138 #ifdef WITH_GHOST_DEBUG
140 case DISP_CHANGE_SUCCESSFUL:
141 printf(
"display change: The settings change was successful.\n");
143 case DISP_CHANGE_RESTART:
145 "display change: The computer must be restarted in order for the graphics mode to "
148 case DISP_CHANGE_BADFLAGS:
149 printf(
"display change: An invalid set of flags was passed in.\n");
151 case DISP_CHANGE_BADPARAM:
153 "display change: An invalid parameter was passed in. "
154 "This can include an invalid flag or combination of flags.\n");
156 case DISP_CHANGE_FAILED:
157 printf(
"display change: The display driver failed the specified graphics mode.\n");
159 case DISP_CHANGE_BADMODE:
160 printf(
"display change: The graphics mode is not supported.\n");
162 case DISP_CHANGE_NOTUPDATED:
163 printf(
"display change: Windows NT: Unable to write settings to the registry.\n");
166 printf(
"display change: Return value invalid\n");
static BOOL get_dd(DWORD d, DISPLAY_DEVICE *dd)
GHOST_TSuccess getNumDisplaySettings(uint8_t display, int32_t &numSettings) const
GHOST_TSuccess getDisplaySetting(uint8_t display, int32_t index, GHOST_DisplaySetting &setting) const
GHOST_TSuccess setCurrentDisplaySetting(uint8_t display, const GHOST_DisplaySetting &setting)
GHOST_DisplayManagerWin32(void)
GHOST_TSuccess getNumDisplays(uint8_t &numDisplays) const
GHOST_TSuccess getCurrentDisplaySetting(uint8_t display, GHOST_DisplaySetting &setting) const
GHOST_TSuccess findMatch(uint8_t display, const GHOST_DisplaySetting &setting, GHOST_DisplaySetting &match) const