XDron
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Aleksoid1978 В mplayer.h В структуре dispmode добавить поле DWORD dmDisplayFlags; -Вся структура------------------------ typedef struct { bool fValid; CSize size; int bpp, freq; DWORD dmDisplayFlags; } dispmode; -------------------------------------- В mplayer.cpp GetCurDispMode() - не меняем, cчитаем, что у видео-карты на одном и том же дисплее нет режимов 25p и 25i или 30p и 30i GetDispMode(dispmode& dm, CString& DisplayName) После dm.freq = devmode.dmDisplayFrequency; добавить: ---------------------------------------- dm.dmDisplayFlags = devmode.dmDisplayFlags; ---------------------------------------- SetDispMode(dispmode& dm, CString& DisplayName) заменить dmScreenSettings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY; на ---------------------------------------- dmScreenSettings.dmDisplayFlags = dm.dmDisplayFlags; dmScreenSettings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY | DM_DISPLAYFLAGS; ---------------------------------------- В PPagePlayback.cpp После m_dms.Add(dm); // 1920x1080 16bpp 24Hz, 1920x1080 24bpp 25Hz, 1920x1080 32bpp 30Hz also exist str.Format(_T("%dx%d %dbpp %dHz"), dm.size.cx, dm.size.cy, dm.bpp, dm.freq); Добавить ---------------------------------------- if (dm.dmDisplayFlags == DM_INTERLACED) str=str+_T(" interlaced"); ---------------------------------------- В строчках str.Format(_T("%dx%dP %dbpp AUTO 23.97@24, 25.00@25, 29.97@30"), dm.size.cx, dm.size.cy, dm.bpp); str.Format(_T("%dx%dP %dbpp AUTO 23.97@24, 25.00@50, 29.97@60"), dm.size.cx, dm.size.cy, dm.bpp); Добавь выделенную P Теперь для ATI3850 под Win7 выглядит так: А на NVidia GeForce 8300 integrated под XP все так же шоколадно. По поводу вопроса от Sola Цитата: заметил еще такую вещь, почему-то оба устройства отображения у меня в опциях MPC-HC одинаковые хотя в драйвере АТИ Каталист вот так ну а в винде вообще вот так | За вывод текста в combobox отвечает этот код(не мой, я без изменений неренес его из PPageOutput.cpp): ----------------------------------------- // Определяется количество мониторов и запускается цикл по их количеству for ( int i = 0; i < monitors.GetCount(); i++ ) { // В структуру monitor заносятся данный по i-му монитору. monitor = monitors.GetMonitor( i ); // В строку str сбрасывается имя монитора (для первого монитора - \\.\DISPLAY1, для второго \\.\DISPLAY2) monitor.GetName(str); if(monitor.IsMonitor()) { // Создается переменая displayDevice типа DISPLAY_DEVICE DISPLAY_DEVICE displayDevice; // displayDevice обнуляется ZeroMemory(&displayDevice, sizeof(displayDevice)); // В поле "cb" заносится размер структуры displayDevice. displayDevice.cb = sizeof(displayDevice); // В зависимости от имени дисплея в str, в displayDevice сбрасываются данные по дислею VERIFY(EnumDisplayDevices(str, 0, &displayDevice, 0)); // В combobox заносится строка \\.\DISPLAYi - "строка описания монитора" из полученных выше данных в displayDevice. m_iMonitorTypeCtrl.AddString(str+_T(" - ")+ displayDevice.DeviceString); ........ } } ----------------------------------------- Все собственно просто и логично. Описание EnumDisplayDevices() с MSDN. BOOL EnumDisplayDevices( __in LPCTSTR lpDevice, __in DWORD iDevNum, __out PDISPLAY_DEVICE lpDisplayDevice, __in DWORD dwFlags ); To obtain information on a display monitor, first call EnumDisplayDevices with lpDevice set to NULL. Then call EnumDisplayDevices with lpDevice set to DISPLAY_DEVICE.DeviceName from the first call to EnumDisplayDevices and with iDevNum set to zero. Then DISPLAY_DEVICE.DeviceString is the monitor name. Собственно так и сделано. Только для определения имени монитора используется не первый вызов EnumDisplayDevices, а monitor.GetName(str). Для проверки сделал именно так как рекомендуют мелкомягкие. Собственно видно, что имена совпадают. После некоторых эксперементов оказалось, что если использовать вариант мелкомягких, то у меня 4 монитора с именами \\.\DISPLAY1 \\.\DISPLAYV1 \\.\DISPLAY2 \\.\DISPLAYV2 У меня нет никаких мыслей, почему у Sola показывает так как на скриншотах. У меня вот так. | Всего записей: 87 | Зарегистр. 23-01-2006 | Отправлено: 20:34 06-01-2010 | Исправлено: XDron, 20:36 06-01-2010 |
|