Vollbild Visual C++ Dialog
-
Hello!
ich sitzte nun schon ziemlich lange an einem Problem und finde keine Loesung dazu. Ich habe stundenlang das Internet durchsucht und keine Antwort gefunden....bin ich der einzige mit dem Problem???

Ich benutze Visual Studio 6.0 (jaja ich weiss, is uralt, muss das aber benutzen) und moechte ein einfaches Fenster mit ein paar Informationen erstellen (Zeitangabe, Statusangaben, etc...). Dieses Fenster soll direkt als Vollbild starten. Das Problem ist, dass es auf mehreren Rechnern laufen soll, die unterschiedliche Aufloesungen benutzen!
Die Problematik dabei ist, dass sich die Textfelder nicht dynamisch der Groesse anpassen....
Ich lass also das Fenster maximieren und entferne die Taskleiste mitShowWindow(SW_SHOWMAXIMIZED); ModifyStyle(WS_CAPTION,0)das laeuft auch soweit, ausser halt das Problem mit den Textfeldern!
Hat jemand ne Ahnung, wie man das hinbekommt???
Gruss
-
hallo.
Was machst du denn mit 6.0 was mit nicht mit nachfolgversionen machen könnte ?Also solbald du das fenster in der größe änderst, wird eine nachricht losgeschickt ( die siehts du nicht ). DU kannst aber auf die nachricht (ereignis) reagieren. Ich glaube sie heißt movesize, du kannst dann weiterhin die fenstergröße mit getwindowsize ermitteln und musst dann die textelemente damit platzieren.
das war das was mir nochin erinnerung geblieben ist.
-
Hey, danke fuer die schnelle Antwort!
Ich muss 6.0 nehmen, weil ich unter gar keinen Umstaenden irgendwas anderes installieren darf...jaja, ich weiss! Is voll fuer'n Arsch!
Ganz generell geht es darum, dass gewissen Ereignisse in einer Datenbank hinterlegt werden. Die sollen ueber einen Monitor und Fernseher angezeigt werden, inkl. so ein paar Infos wie Datum, Zeit, etc....
Das mit dem "movesize" habe ich auch schon ueberlegt, aber momentan eher hatte ich eher die Idee, dass ich das Fenster einfach fuer ne 800x600er Aufloesung zeichne und dann in der Initiallisierung die Aufloesung automatisch auf 800x600 bringe ueber
DEVMODE dmAufloesung; memset(&dmAufloesung, 0 , sizeof(dmAufloesung)); dmAufloesung.dmSize = sizeof(dmAufloesung); dmAufloesung.dmPelsWidth = nBreite; // Breite der Auflösung dmAufloesung.dmPelsHeight = nHoehe; // Höhe der Auflösung dmAufloesung.dmBitsPerPel = 32; // Farbtiefe dmAufloesung.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; if (ChangeDisplaySettings(&dmAufloesung , CDS_FULLSCREEN | CDS_UPDATEREGISTRY) != DISP_CHANGE_SUCCESSFUL) { MessageBox("FEHLER!", "FEHLER", MB_OK); return;Erstes Problem ist: lassen sich alle Grafikkarten auf 800x600 einstellen?! Meiner ansicht nach schon
Zweites Problem ist, dass ich keinen Befehl, Funktion, etc. finde um die Aufloesung wieder zurueck zustellen!
Bin gerade an der Funktion atexit() dran! Hier is wiederum das Problem, dass man eine Funktion angeben kann, die beim beenden abgearbeitet wird, aber die Funktion darf keine Uebergabewerte haben
//in der Initiallisierung aktuelle Aufloesung speichern und dann aendern //durch: Aufloesung_aendern(800,600); //und zur wiederherstellung theoretisch: atexit(Aufloesung_aendern(vorherigenWerte)); //Problem:bei der zu //uebergebenen Funktion duerfen keine Werte uebergeben werden void CAufloesungDlg::Aufloesung_aendern(int nBreite, int nHoehe) { DEVMODE dmAufloesung; memset(&dmAufloesung, 0 , sizeof(dmAufloesung)); dmAufloesung.dmSize = sizeof(dmAufloesung); dmAufloesung.dmPelsWidth = nBreite; // Breite der Auflösung dmAufloesung.dmPelsHeight = nHoehe; // Höhe der Auflösung dmAufloesung.dmBitsPerPel = 32; // Farbtiefe dmAufloesung.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; if (ChangeDisplaySettings(&dmAufloesung , CDS_FULLSCREEN | CDS_UPDATEREGISTRY) != DISP_CHANGE_SUCCESSFUL) { MessageBox("FEHLER!", "FEHLER", MB_OK); return; } }
-
Edit:
Hab letzte Woche erst mit C++ angefangen und hab deshalb nicht wirklich Ahnung. Eigentlich bastel ich mir mein Programm aus Codeschnipseln zusammen, die ich so im Internet finde und aus meinen C Kenntnissen!
-
Hallo.
Also wenn ich dein Problem richtig verstehe willst du eine GUI bauen die auf allen Grafiksystem ( auflösungen ) funktioniert.Es gibt 2 Varianten :
ENtweder man nimmt eine einheitliche GRöße der GUI -> nich die Auflösung ver#ndernOder man stell die GUI in den Vollbildmodus
-
Also meiner meinung nach is das umstellen der Auflösung das unkonfortabelste für den user was es gibt. Würde ich net machen, es sei denn es is ein spiel aber das is dann was anderes
Auflösung ermitteln:
int nBreite, nHoehe; nBreite = GetSystemMetrics(SM_CXSCREEN); nHoehe = GetSystemMetrics(SM_CYSCREEN);Auflösung deines Windows einstellen:
SetWindowPos();mußt du in der initialisierung deines Windows Aufrufen mit den entsprechenden Parametern
alles was du in der Position anpassen muß, machst du in der:
OnSize()das is ein Event deiner Windowsklasse, also die mußt du überladen
Auflösung des Benutzers ändern (außn netz also weiss net wirklich ob das geht):
DEVMODE dmAufloesung; memset(&dmAufloesung, 0 , sizeof(dmAufloesung)); dmAufloesung.dmSize = sizeof(dmAufloesung); dmAufloesung.dmPelsWidth = 1024; // Breite der Auflösung dmAufloesung.dmPelsHeight = 768; // Höhe der Auflösung dmAufloesung.dmBitsPerPel = 32; // Farbtiefe dmAufloesung.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; if (ChangeDisplaySettings(&dmAufloesung , CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { MessageBox("FEHLER!", "FEHLER",MB_OK); return; }Zurücksetzen (weiss auch net ob das richtig is):
ChangeDisplaySettings(NULL,CDS_RESET);sollte erstmal weiter helfen
-
ich möchte noch das stichwort "anchoring" einwerfen.. google spuckt dazu genug aus...