Пример утилиты, переключающей разрешение экрана
От: Аноним  
Дата: 02.04.05 19:20
Оценка: 20 (1)
#Имя: FAQ.winapi.vmctl
Здравствуйте, Whirlwind, Вы писали:

W>Не могу разобраться где грабля. Нужное разрешение выставляет SDL. Проблема с восстановлением режима. Как только не изголялся. И так

W>...
W>и так
W>...
W>И так
W>...
W>И с бубном поплясал. И броадкастом всем орал

W>Все время что нибудь не то получается.


Думается мне, что все из-за использования DM_DISPLAYFREQUENCY (что есть правильно) и неинициалированного .dmDisplayFrequency (что есть неправильно).
Еще рабочий пример утилиты, переключающей разрешение (с исходниками) есть здесь:
http://alter.org.ua/soft/win/vidcontrol
ChangeDisplaySettings не хочет пахать
От: Whirlwind Россия http://whirlwind.ru
Дата: 02.04.05 17:38
Оценка:
Не могу разобраться где грабля. Нужное разрешение выставляет SDL. Проблема с восстановлением режима. Как только не изголялся. И так
WE3D_DWORD dwResult = ChangeDisplaySettings(WE3D_NULL,CDS_UPDATEREGISTRY);

и так
memset(&dm,0,sizeof(dm));
dm.dmSize = sizeof(dm);
dm.dmBitsPerPel = (DWORD)original_DisplayMode.dwBPP;
dm.dmPelsWidth = (DWORD)original_DisplayMode.dwWidth;
dm.dmPelsHeight = (DWORD)original_DisplayMode.dwHeight;
dm.dmFields = DM_PELSHEIGHT | DM_PELSWIDTH | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
dwResult = ChangeDisplaySettings(&dm,CDS_UPDATEREGISTRY);

И так
SDL_FreeSurface(screen);
screen = SDL_SetVideoMode(selected_DisplayMode.dwWidth,
    selected_DisplayMode.dwHeight,original_DisplayMode.dwBPP,
    SDL_FULLSCREEN);
if (screen == WE3D_NULL)
{

И с бубном поплясал. И броадкастом всем орал
WE3D_DWORD lParam = MAKELONG(original_DisplayMode.dwWidth,
    original_DisplayMode.dwHeight);
PostMessage(HWND_BROADCAST,WM_DISPLAYCHANGE,original_DisplayMode.dwBPP,lParam);


Все время что нибудь не то получается. В несколько этапов (SDL+WINAPI) получается восстановить, но окна не реагируют на изменение резы. В остальных случаях реза просто сбрасывается в 640х480х32. При этом CDS выдает DISP_CHANGE_FAILED и хоть тресни — не хочет восстанавливать. Самое интересное, что не хочет восстанавливать только 1024х768х32 (хотя через виндовые ГУИ этот режим прекрасно выставляется и постоянно работает). Например если выставить 1024х768х16 а прогой выбрать какой нить с глубиной 32 бита, то обратно восстанавливается. Я вообще не пойму кто это глючит: то ли дрова, то ли винда, то ли я.

Куда хоть копать, подскажите пожалуйста.
Спасибо.
Re[2]: ChangeDisplaySettings не хочет пахать
От: Whirlwind Россия http://whirlwind.ru
Дата: 03.04.05 10:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Думается мне, что все из-за использования DM_DISPLAYFREQUENCY (что есть правильно) и неинициалированного .dmDisplayFrequency (что есть неправильно).


Не, ей по барабану и с частотой и без частоты не работает.
Re[3]: ChangeDisplaySettings не хочет пахать
От: Whirlwind Россия http://whirlwind.ru
Дата: 04.04.05 14:14
Оценка:
Так что, больше никаких идей по этому поводу нет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.