Größenänderung des nutzbaren Desktops abfangen
-
Hallo zusammen,
ich benutze Visual Studio 2010 Express und möchte gerne die Größe meiner Anwendung dynamisch an die verfügbare Desktopgröße anpassen. Kann mir jemand einen Tipp geben wie ich Änderungen der Desktopgröße oder der Taskleiste abfangen kann?
-
Du bist hier falsch.
MFC gibt es in der Express nicht. Welche Sprache verwendest Du?
-
Warum maximierst Du nicht Dein Fenster?
-
Danke für Eure Antworten,
Ich benutze C++ und ich denke Du hast recht das ich hier falsch bin wenn nur für MFC Hilfestellung gegeben wird.
Maximieren ist nur eine eingeschränkte Lösung, da auch danach die Taskleiste vergrößert werden kann. Eventuell kann man dann noch das Paint-Ereignis abfangen. Das tritt aber erst nach einer gewissen Zeit ein und nicht direkt nachdem die Taskleiste oder die Größe des verfügbaren Desktops geändert wurde.
-
Hä?
Ich glaube Du musst mal erläutern was Du genau willst... für mich redest Du in Rätseln...
-
Ok,
der verfügbare Bereich des Desktops kann ja variieren. Z. B. durch das Ändern der Taskleiste (mehrzeilig). Wenn also ein Benutzer die Taskleiste verändert würde ich dieses Ereignis gerne abfangen und daraufhin die Größe meiner Anwendung an die Größe des nutzbaren Desktops anpassen. Mir kommt es in 1. Linie nur auf die maximal mögliche Höhe an. Maximieren bringt nichts da die Form dann hinter der Taskleiste verschwindet.
-
Warum soll ein Fenster hinter der Taskleiste verschwinden?
WIE hast Du eine Taskleiste eingestellt? Warum willst Du diese Einstellungen vom Benutzer ändern?Oder suchst Du etwas den FullScreen-Mode?
Ich verstehe imme rnoch nicht was Du willst...
-
Die Taskleiste ist doch variierbar oder? Wenn ich mit der Maus die obere Kante nach oben ziehe verringert sich die Größe des nutzbaren Desktops.
Ob die Taskleiste fixiert ist oder nicht ist egal. Ich möchte einfach meine Anwendung in der Höhe anpassen wenn die Taskleiste in der Höhe verändert wird.
Und wie gesagt man das kann mit dem Maximieren der Form nicht erreichen.
Um die Form in der Höhe anzupassen würde ich das Ereignis der Taskleistenänderung gerne abfangen und darauf reagieren.
Wenn ich in Visual C++ 2010 eine Anwendung erstelle kann ich aber nirgends das Abarbeiten der MessageQueue finden.
-
Wenn ein Fenster maximiert ist, wird es automatisch in der Grösse angepasst wenn die grösse der Taskbar verändert wird.
Du musst also nur in den entsprechenden Nachrichtenhandlern reagieren.Wenn du automatisch ein WM_PAINT bekommen willst, kannst du CS_HREDRAW und CS_VREDRAW verwenden.
-
Hi hustbaer,
Fakt 1: Die Form die bei Programmstart aufgerufen wird ist bereits maximiert (in den Eigenschaften aktiviert)
Fakt 2: Es gibt keine Maximize oder Minimize Schaltflächen (in den Eigenschaften deaktiviert)
Fakt 3: Wenn eine Anwendung so gestartet wird und zum Beispiel am unteren Rand eine Statuszeile besitzt verschwindet diese hinter der TaskleisteäFrage an Dich: Auch wenn ich denke das das Nutzen einer WM_PAINT Nachricht nicht zur Lösung führt, wo befindet sich der Nachrichtenhandler bei einer WindowsForms Anwendung in Visual C++ 2010?
-
Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Das Paint Event wird unter anderem beim ausblenden der Taskleiste ausgelöst.
Screen^ _scr = Screen::PrimaryScreen; int _height = _scr->WorkingArea.Height; int _width = _scr->WorkingArea.Width;
-
1. Wie kann man das Paint Event abfangen in einer Windows Forms Anwendung, die mit Visual C++ 2010 Express erstellt wurde?
2. Gibt es noch andere Ereignisse auf die man reagieren kann wenn die Größe der Taskleiste verändert wird (z. Bsp. durch das manuelle ziehen)?
-
this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::Form1_Paint); this->ResumeLayout(false); } #pragma endregion private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { Screen^ _scr = Screen::PrimaryScreen; int _height = _scr->WorkingArea.Height; int _width = _scr->WorkingArea.Width; this->Text::set("Height: " + _height.ToString() + "\n" + "Width: " + _width.ToString()); }
Sobald die Form den Focus besitzt, wird die Größe in der Titelleiste der Form angezeigt, auch wenn die Taskleiste manuell verändert wird.
-
this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::Form1_Paint); this->ResumeLayout(false);
Was bewirken diese Zeilen?
Gibt es keinen generellen Messagehandler?
-
Ich habe bis heute noch nicht Deinen Anwendungsfall verstanden...
-
Und ich habe noch nie verstanden, warum so viele Anfänger es nicht fertig bringen, einfach ein Buch zu lesen.
Man kann doch keine GUI-Programmierung erlernen, wenn nichtmal die Sprachgrundlagen (Events) sitzen. Und durch Nachfragen in einem Forum, nur um irgendwie einen absurden Wunsch umzusetzen, lernt man erst recht nichts.
OP: Kauf Dir ein gutes Buch. Zu C# oder zu C++, aber nicht zu C++/CLI. Der Steinige Weg durch die Grundlagen kann Dir niemand abnehmen