Осмотрев еще немного, я наткнулся на функцию GDI , которая позволяет мне получить доступ к текущему разрешению и частоте обновления. В сочетании с функцией IDXGIOutput::FindClosestMatchingMode
я могу получить довольно близко к текущему режиму отображения:
void getClosestDisplayModeToCurrent(IDXGIOutput* output, DXGI_MODE_DESC* outCurrentDisplayMode)
{
DXGI_OUTPUT_DESC outputDesc;
output->GetDesc(&outputDesc);
HMONITOR hMonitor = outputDesc.Monitor;
MONITORINFOEX monitorInfo;
monitorInfo.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor, &monitorInfo);
DEVMODE devMode;
devMode.dmSize = sizeof(DEVMODE);
devMode.dmDriverExtra = 0;
EnumDisplaySettings(monitorInfo.szDevice, ENUM_CURRENT_SETTINGS, &devMode);
DXGI_MODE_DESC current;
current.Width = devMode.dmPelsWidth;
current.Height = devMode.dmPelsHeight;
bool useDefaultRefreshRate = 1 == devMode.dmDisplayFrequency || 0 == devMode.dmDisplayFrequency;
current.RefreshRate.Numerator = useDefaultRefreshRate ? 0 : devMode.dmDisplayFrequency;
current.RefreshRate.Denominator = useDefaultRefreshRate ? 0 : 1;
current.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
current.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
current.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
output->FindClosestMatchingMode(¤t, outCurrentDisplayMode, NULL);
}
... Но я не думаю, что это действительно правильный ответ, потому что я необходимость использовать устаревшие функции. Есть ли способ сделать это с помощью DXGI, чтобы получить точный текущий режим отображения, а не использовать этот метод?
Извините, я не ищу режим отображения _current_, а не список режимов отображения _available_. Но глядя на исходный код ссылки, которую вы предоставили, привел меня к другому набору функций Windows, которые могут помочь мне перейти в текущий режим отображения ... –