eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingcoś lajtowego - konsolaRe: coś lajtowego - konsola
  • Data: 2012-10-19 12:37:57
    Temat: Re: coś lajtowego - konsola
    Od: Baranosiu <r...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Dnia 19.10.2012 kenobi <p...@g...com> napisał/a:
    > W dniu piątek, 19 października 2012 11:44:00 UTC+2 użytkownik Baranosiu napisał:
    >> Dnia 19.10.2012 kenobi <p...@g...com> napisał/a:
    >>
    >> > W dniu piątek, 19 października 2012 10:48:01 UTC+2 użytkownik Sławomir Szczyrba
    napisał:
    >>
    >> >> kenobi donosi :
    >>
    >> >>
    >>
    >> >> >> > 320x200 512x384 640x480 - ale nie wszystkie
    >>
    >> >>
    >>
    >> >> > mozesz powiedziec czy udaje sie odpalic w tych rozdzialkach ?
    >>
    >> >>
    >>
    >> >> >
    >>
    >> >>
    >>
    >> >> Hm, pod WINE zamroziło mi kartę grafiki (intel) na amen.
    >>
    >> >>
    >>
    >> >> Musiałem odpiąć kompa od prądu.
    >>
    >> >>
    >>
    >> >> Boję się pytać, JAK ty te tryby graficzne ustawiasz...
    >>
    >> >>
    >>
    >> >>
    >>
    >> > normalnie to jest zwykle wywolanie tak ze
    >>
    >> > nie ja raczej odpowiadam za tego freeze
    >>
    >> >
    >>
    >> > void changeResolution(int width, int height, int bpp, int rate=0)
    >>
    >> > {
    >>
    >> > DEVMODE fullscreenSettings;
    >>
    >> >
    >>
    >> > EnumDisplaySettings(NULL, 0, &fullscreenSettings);
    >>
    >> >
    >>
    >> > fullscreenSettings.dmPelsWidth = width;
    >>
    >> > fullscreenSettings.dmPelsHeight = height;
    >>
    >> > fullscreenSettings.dmBitsPerPel = bpp;
    >>
    >> > fullscreenSettings.dmDisplayFrequency = rate;
    >>
    >> > fullscreenSettings.dmFields = DM_PELSWIDTH |
    >>
    >> > DM_PELSHEIGHT |
    >>
    >> > DM_BITSPERPEL
    >>
    >> > | DM_DISPLAYFREQUENCY
    >>
    >> > ;
    >>
    >> >
    >>
    >> > bool isChangeSuccessful = ChangeDisplaySettings(&fullscreenSettings,
    CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL;
    >>
    >> >
    >>
    >> >
    >>
    >> > }
    >>
    >> >
    >>
    >> > i wywolania
    >>
    >> >
    >>
    >> > if(Key=='1') changeResolution(320, 200, 32);
    >>
    >> > if(Key=='2') changeResolution(512, 384, 32);
    >>
    >> > if(Key=='3') changeResolution(640, 480, 32);
    >>
    >> > if(Key=='4') changeResolution(800, 600, 32);
    >>
    >> > if(Key=='5') changeResolution(1024, 768, 32);
    >>
    >> >
    >>
    >> > u mnie pod xp bardzo ladnie dziala ale ktos
    >>
    >> > chyba z win 7 mowil mi ze u niego nie ma reakcji na 1 i 2 dziala tylko 3 (i
    pewnie 4 5)
    >>
    >>
    >>
    >> A to z tego co pamiętam, to działa mniej więcej tak, że jak wywołasz
    >>
    >> EnumDisplaySettings(NULL,0,&wskaznik); to tylko inicjujesz utworzenie
    >>
    >> "tablicy" wszystkich dostępnych trybów, a potem się jedzie pętlą i
    >>
    >> wywołuje EnumDisplaySettings tylko zamiast 0 jako drugiego argumentu
    >>
    >> wstawia się kolejno 1,2,3... itd. aż do momentu, kiedy ta funkcja
    >>
    >> zwróci FALSE (zero), oczywiście po każdym wywołaniu możesz sobie
    >>
    >> sprawdzić jakie dane funkcja Ci zwróciła w strukturze 'wskaznik' :D
    >
    > no jeszcze sie tym nie interesowalem za
    > duzo
    >
    > dorzucilem dla testow program console2 do
    > tego samego zipa mozna wydawac polecania
    > typu
    >
    > fullscreen 320 200 32
    >
    > i sprawdzac czy dziala, zakomentowalem tez
    > linijeke ustawiajaca rate na zero bo to chyba
    > wymuszalo najnizsze refreshrate i bez tego chyba
    > lepiej dziala - jakby cos to escape wychodzi
    > z progsa i rozdzialaka wraca do normalnej
    >

    Tu masz jak używać EnumDisplaySettings:
    http://msdn.microsoft.com/en-us/library/windows/desk
    top/dd162611(v=vs.85).aspx

    Szczególną uwagę zwróć na opis pola ipDevMode, PRZED wywołaniem tej
    funkcji do pola dmSize trzeba wstawić wielkość struktury DEVMODE i
    ustawić dmDriverExtra na dodatkowe dane drivera (lub zero), dopiero po
    tym wołasz EnumDisplaySettings(NULL,0,&wskaznik) co spowoduje
    "odpytanie" drivera o dostępne tryby. Kolejne tryby przeglądasz
    wstawiając jako drugi argument kolejne liczby naturalne (poczynając od
    1) i w strukturze 'wskaznik' dostajesz informacje o kolejnych trybach
    (i trzeba sprawdzać pole dmFields, czy odpowiednie bity są ustawione
    na 1, bo jeśli na 0, to znaczy, że odpowiadające mu pole w strukturze
    'wskaznik' nie zostalo ustawione przez driver, a więc zawiera "losowe"
    dane). Opis pól dmFields jest tu:
    http://msdn.microsoft.com/en-us/library/windows/desk
    top/dd183565(v=vs.85).aspx
    Jeśli znajdziesz spełniający Twoje wymagania tryb (może pasować
    rozdzielczość, ale niektóre karty mają 24-bitowe TrueColor, a inne
    32-bitowy), to go ustawiasz przez ChangeDisplaySettings (nie
    modyfikujesz nic w strukturze na własną rękę! masz gotowca zwróconego
    przez driver a więc coś, co "na pewno" jest obsługiwane!). Opis
    ChangeDisplaySettings jest tu:
    http://msdn.microsoft.com/en-us/library/windows/desk
    top/dd183411(v=vs.85).aspx
    Możesz najpierw wywołać ChangeDisplaySettings z CDS_TEST dołożonym do
    dwflags aby sprawdzić, czy dana kombinacja przejdzie w trybie
    fullscreen :D
    Jeśli szukany przez Ciebie tryb nie jest obsługiwany przez kartę
    (czyli wywołując EnumDisplaySettings dojdziesz do "FALSE"), to nie ma
    sensu "siłowo" wołać ChangeDisplaySettings z na sztywno wpisanymi w
    program wartościami :D

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: