Bildschirmauflösung ändert sich nicht mit "ChangeDisplaySettings"



  • Hallo!

    Benutzer Compiler ist "mingw32".
    Warum läuft folgender code, ändert aber nichts an der Auflösung des Monitors?
    Als Return kommt immer ein DISP_CHANGE_SUCCESSFUL.
    Hab das Internet jetzt über eine Stunde abgesucht und diverse Möglichkeiten vergeblich versucht...

    Hier der code, Hilfe ist willkommen:

    #include<windows.h>
    #include<stdio.h>
    #include<conio.h>
    
    #define CDS_FORCE	0x80000000
    
    DWORD weite_neu = 1024;
    DWORD hoehe_neu = 768;
    DWORD farbtiefe = 32;
    DWORD wiederholfrequenz = 75;
    
    int main(){
    	DEVMODE d;
    	int i,iResult;
    
    	memset(&d,0,sizeof(d));
    
    	d.dmSize = sizeof(d);
    	d.dmDisplayFlags = DM_PELSWIDTH	| DM_PELSHEIGHT | DM_BITSPERPEL;
    
    	printf("mode: %d x %d -> ",weite_neu,hoehe_neu);
    	d.dmPelsHeight = hoehe_neu;
    	d.dmPelsWidth = weite_neu;
    	d.dmBitsPerPel = farbtiefe;
    	//d.dmDisplayFrequency = wiederholfrequenz;
    
    	// Testen, ob die Einstellungen unterstützt werden
    	iResult = ChangeDisplaySettings(&d,CDS_TEST);
    
    	switch(iResult)
    	{	case DISP_CHANGE_SUCCESSFUL:	if(ChangeDisplaySettings(&d,CDS_FORCE)==DISP_CHANGE_SUCCESSFUL)
    											puts("SUCCESS");
    										else
    											puts("MIST!");
    										break;
    		case DISP_CHANGE_RESTART:
    			puts("RESTART");break;
    		case DISP_CHANGE_BADFLAGS:
    			puts("BADFLAGS");break;
    		case DISP_CHANGE_FAILED:
    			puts("FAILED");break;
    		case DISP_CHANGE_BADMODE:
    			puts("BADMODE");break;
    		case DISP_CHANGE_NOTUPDATED:
    			puts("NOTUPDATED");break;
    		default:
    			puts("ERROR");break;
    	}
    	getch();
    }
    

    Gruß



  • hi
    ganz einfach:
    bei der initialisierung von DEVMODE musst du noch dmFields angeben..
    für die Auflösung und Farbtiefe wär das

    d.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL;
    

    siehe: http://msdn.microsoft.com/en-us/library/aa452943.aspx

    bei dmFields sind da eben alle Flags aufgelsitet... für die Frequenz bräuchteste bestimmt noch ein andres flag.. aber das findeste bei msdn (link)

    ich hoffe das hilft, bei mir hats jeden falls funktioniert

    MFG



  • Danke, das war es. 🙂


Anmelden zum Antworten