Beeldinstellingen maken via C++

Status
Niet open voor verdere reacties.

quadran

Gebruiker
Lid geworden
26 jul 2006
Berichten
162
Ik heb een programma geschreven en dit werkt enkel goed bij een groter aantal pixel instellingen dan 800x600, nl 1280x1024.

Zou het mogelijk zijn via het C++ programma dit van 800x600 op een andere instelling (1280x1024) te zetten en bij het afsluiten terug op 800x600?

Of moet ik dit steeds handmatig gaan uitvoeren?

Mvg
 
Dat kan normaal wel via je eigen code. Zelf heb ik weinig ervaring met grafische libs, maar het zal voor anderen zeker handig zijn als je post welke jij gebruikt.
 
Wat bedoel je met welke ik gebruik?

Ik gebruik gewoon standaard C++ Builder 6.0 Enterprise :confused:
 
Dat is dus de Borland-variant, zelf geen ervaring mee.

In de STL van C++ wordt niks, maar dan ook zo goed als niks, gezegd over grafisch programmeren. Er zijn echter verschillende groepen programmeurs die codebibliotheken zijn gaan schrijven om het voor jou mogelijk te maken makkelijk een gui te ontwikkelen zonder dat je elke pixel zelf in je videogeheugen moet programmeren. De gekendste zijn DirectX en OpenGL. Maar zo heeft bvb ook Borland zijn eigen bibliotheek om vensters op het scherm te toveren.

[EDIT]
dit vond ik door te zoeken op 'borland c++ screen resolution', aangezien ik borland niet ken, weet ik niet of het werkt..
Code:
' change the screen resolution mode
'
' returns True if the requested resolution mode is among those
' supported by the display adapter (otherwise it doesn't even
' try to change the screen resolution) 

Function ChangeScreenResolution(ByVal Width As Long, ByVal Height As Long, _
    ByVal NumColors As Long, Optional Frequency As Long) As Boolean
    Dim lpDevMode As DEVMODE
    Dim index As Long
   
    ' set the DEVMODE flags and structure size
    lpDevMode.dmSize = Len(lpDevMode)
    lpDevMode.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
   
    ' retrieve info on the Nth display mode, exit if no more
    Do While EnumDisplaySettings(0, index, lpDevMode) > 0
        ' check whether this is the mode we're looking for
        If lpDevMode.dmPelsWidth = Width And lpDevMode.dmPelsHeight = Height _
            And 2 ^ lpDevMode.dmBitsPerPel = NumColors Then
            ' check that the frequency is also the one we're looking for
            If Frequency = 0 Or Frequency = lpDevMode.dmDisplayFrequency Then
                ' try changing the resolution
                If ChangeDisplaySettings(lpDevMode, CDS_FORCE) = 0 Then
                    ' zero means success
                    ChangeScreenResolution = True
                    Exit Do
                End If
            End If
        End If
        ' skip to next screen mode
        index = index + 1
    Loop

End Function
[/EDIT]

[EDIT]
Deze ziet er nog eenvoudiger uit..
Code:
#include <windows>
#include <iostream>
int main()
{
int w=1024;
int h=768;
int d=32;
DEVMODE sDevMode;
ZeroMemory(&sDevMode, sizeof(DEVMODE));
sDevMode.dmSize = sizeof(DEVMODE);
sDevMode.dmPelsWidth = w;
sDevMode.dmFields |= DM_PELSWIDTH;
sDevMode.dmPelsHeight = h;
sDevMode.dmFields |= DM_PELSHEIGHT;
sDevMode.dmBitsPerPel = d;
sDevMode.dmFields |= DM_BITSPERPEL;
LONG rVal = ChangeDisplaySettings(&sDevMode, CDS_UPDATEREGISTRY);
switch (rVal)
{
case DISP_CHANGE_SUCCESSFUL:  //The settings change was successful.
break;
default:
cout << "Error.";
break;
}
return 0;
}
[/EDIT]
 
Laatst bewerkt:
In de compiler werkt de code,

als standalone geeft ie een fout :shocked:
 
Zou je dan rechtsonder nog even op 'Vraag is opgelost' willen klikken?

En heb je de eerste of de tweede code gebruikt, is altijd handig voor mensen met hetzelfde probleem..
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan