Auflösung des Monitors ändern
-
-
Also ich mache immer wenn ich eine solche allgemeine funktion aufrufe, die auf bestimmte #defines reagiert, immer erst mal einen test ob es nicht auch ein define gibt, wo set drin seht. Ganz einfach: man drück Strg+Leertaste und gibt dann SPI_SETW ein und schon sieht man: juhu es gibt ein SPI_SETWORKINGAREA, und nund kann der gesunde menschenverstand daraus schließen, dass man damit die auflösung einstellen kann. Zur sicherheit kann man nun noch schnell die dokumentation der funktion angucken und gut isses.
Naja aber ich habs ja nicht so mit dem (vielleicht etwas arrogrant wirkendem) [autocogito] à la TKKG.
-
ja ich habe es versucht.

allerdings mit einer von mir erstellten klasse.
das will aber irgendwie nicht gehen, weiß der geier warum!
Die Klasse:
/* DisplaySettings.h */ #pragma once class CDisplaySettings { public: CDisplaySettings(void); ~CDisplaySettings(void); void Change(void); void Reset(void); public: DEVMODE dmCurrent; private: DEVMODE dmDefault; }; /* DisplaySettings.cpp */ #include <windows.h> #include "DisplaySettings.h" CDisplaySettings::CDisplaySettings(void) { // initialize dmDefault.dmSize = dmCurrent.dmSize = sizeof(DEVMODE); // Get device settings EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&dmDefault); // copy to current memcpy(&dmCurrent,&dmDefault,sizeof(DEVMODE)); } CDisplaySettings::~CDisplaySettings(void) { Reset(); } void CDisplaySettings::Change(void) { // change settings ChangeDisplaySettings(&dmCurrent,CDS_FULLSCREEN); } void CDisplaySettings::Reset(void) { // change settings ChangeDisplaySettings(&dmDefault,CDS_FULLSCREEN); // copy to current memcpy(&dmCurrent,&dmDefault,sizeof(DEVMODE)); }Nun die Main.cpp
{ CDisplaySettings dsDisplay; dsDisplay.dmCurrent.dmPelsWidth = 800; dsDisplay.dmCurrent.dmPelsHeight = 600; dsDisplay.dmCurrent.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; Sleep(10000); dsDisplay.Reset(); return 0; }was ist daran falsch???
die klasse kompiliert er ohne fehler.
danke.
-
Vielleicht solltest du noch CDisplaySettings::Change aufrufen, wenn das nicht klappt, gibt ChangeDisplaySettings wahrscheinlich einen Wert zurück, der auf Erfolg/Fehler schließen lässt und eventuell sogar den Grund dafür, eventuell musst du auch die Funktion GetLastError zu Rate ziehen, alles eine Sache der MSDN
-
Du hast beispielsweise in den DEVMODE structs die ganzen member nicht auf 0 gesetzt. Ich würde die beiden DEVMODEs im ctor initialisieren
CDisplaySettings::CDisplaySettings(void) : dmDefault() { // initialize dmDefault.dmSize = dmCurrent.dmSize = sizeof(DEVMODE); // Get device settings EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&dmDefault); // copy to current dmCurrent = dmDefault; // Warum so schwer? }
-
soo, danke. wenn ich change aufrufe, dann klappts.
aber nun habe ich die Change-Funktion so geändert, dass man direkt den ganzen quark übergeben kann, aber irgendwie will er die Flags nicht hinzufügen.
void CDisplaySettings::Change(int nXRes, int nYRes, int nBits, int nFreq) { dmCurrent.dmFields = NULL; if (nXRes > 0) { dmCurrent.dmFields &= DM_PELSWIDTH; dmCurrent.dmPelsWidth = nXRes; } if (nYRes > 0) { dmCurrent.dmFields &= DM_PELSHEIGHT; dmCurrent.dmPelsHeight = nYRes; } if (nBits > 0) { dmCurrent.dmFields &= DM_BITSPERPEL; dmCurrent.dmBitsPerPel = nBits; } if (nFreq > 0) { dmCurrent.dmFields &= DM_DISPLAYFREQUENCY; dmCurrent.dmDisplayFrequency = nFreq; } if (dmCurrent.dmFields != NULL) { // change settings ChangeDisplaySettings(&dmCurrent,CDS_FULLSCREEN); } }thx.
-
du musst |= benutzten nicht &=.
-
nBits is ned immer größer als 0.
-
warum nBits nicht immer größer als null???
wie soll ich das verstehen?
txh.
-
sorry sorry dachte nBits wär ein bitfeld für flags