//----------------------------------------------------------------------------
// Funktion SwitchVideoMode() ändert die Bildschirmeinstellungen
// sofern die neuen Einstellungen vom System unterstützt werden:
//----------------------------------------------------------------------------
// Parameter: ilWidth = neue Bildschirmbreite in Pixel,
// ilHeight = neue Bildschirmhöhe in Pixel,
// ilColDepth = neue Farbtiefe in Bits per Pixel
// ilDisplayFrequency = Bildwiederholfrequenz (nur NT/2000,
// wird unter Win95-98-Me ignoriert)
//----------------------------------------------------------------------------
// Beispielaufruf: SwitchVideoMode(800,600,16,75);
//----------------------------------------------------------------------------
void SwitchVideoMode(int ilWidth, int ilHeight,
int ilColDepth, int ilDisplayFrequency)
{
DEVMODE sDevMode;
bool blVideoModeValid = false;
// Prüfen, ob einer der verfügbaren Videomodi die
// neuen Einstellungen unterstützt
int ilCurrentModeNo = 0;
while(EnumDisplaySettings(NULL, ilCurrentModeNo, &sDevMode))
{
// Falls Farbtiefe, Höhe und Breite ok:
if(sDevMode.dmBitsPerPel == (DWORD)ilColDepth &&
sDevMode.dmPelsWidth == (DWORD)ilWidth &&
sDevMode.dmPelsHeight == (DWORD)ilHeight)
{
// Falls NT oder 2000, auch die Bildwiederholfrequenz vergleichen:
if(OsWinNt())
{
// Frequenzen vergleichen:
if(sDevMode.dmDisplayFrequency == (DWORD)ilDisplayFrequency)
{
blVideoModeValid = true;
break;
}
}
else
{
blVideoModeValid = true;
break;
}
}
ilCurrentModeNo++;
}
AnsiString slMessage;
if(blVideoModeValid) // Falls Parameter unterstützt...
{
// Bildschirmeinstellungen ändern (die zuvor gefundene DEVMODE-Struktur
// wird der API-Funktiin ChangeDisplaySettings() übergeben)
int ilRetVal = ChangeDisplaySettings(&sDevMode, CDS_UPDATEREGISTRY);
// Rückgabewert auswerten:
switch (ilRetVal)
{
case DISP_CHANGE_SUCCESSFUL:
slMessage = "Bildschirmeinstellungen erfolgreich"
" geändert."; break;
case DISP_CHANGE_RESTART:
slMessage = "Änderungen der Bildschirmeinstellungen "
"werden nach dem Windows-Neustart wirksam."; break;
default:
slMessage = "Fehler bei der Umschaltung der "
"Bildschirmeinstellungen"; break;
}
}
else slMessage = "Angegebene Bildschirmeinstellungen werden "
"auf diesem System nicht unterstützt !";
ShowMessage(slMessage);
}
//----------------------------------------------------------------------------
// Funktion OsWinNt() prüft, ob das Programm unter Win NT/2000 ausgeführt wird
//----------------------------------------------------------------------------
// Rückgabewert: true, falls NT/2000 anderenfalls false
//----------------------------------------------------------------------------
bool OsWinNt(void)
{
OSVERSIONINFO stVerInfo;
stVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&stVerInfo);
return (stVerInfo.dwPlatformId==VER_PLATFORM_WIN32_NT);
}
// Aktuelle Bildschirmgrösse kann mit Hilfe der Eigenschaften
// Height und Width der globalen BCB-Variablen Screen ermittelt werden:
int ilCurrentScreenHeight = Screen -> Height;
int ilCurrentScreenWidth = Screen -> Width;
// die Bestimmung der aktuellen Auflösung erfolgt mit
// Hilfe der API-Funktion GetDeviceCaps():
int ilColorDepth = GetDeviceCaps(Canvas->Handle,BITSPIXEL);
// die Bildwiederholfrequenz kann ebenfalls mit Hilfe der
// GetDeviceCaps() ermittelt werden:
int ilDisplayFrequency = GetDeviceCaps(Canvas->Handle,VREFRESH);
|