Fenster und Formulare

AppActivate

Will man wissen, wodurch ein Fenster aktiviert bzw. deaktiviert wurde, dann kann man das die Methode WndProc überschreiben und die Nachrichten WM_ACTIVATEAPP und WM_ACTIVATE behandeln. Bei Eintreffen von Aktivierungsnachrichten werden entsprechende Informationen in einem ListBox-Steuerelement angezeigt.

Beispielprojekt (AppActivate.zip)

Projekt im Visual-Basic-.NET-2003-Format.

CloseWindow

In Visual Basic 6.0 war es mit einfachen Mitteln möglich, den Grund für das Schließen eines Formulars zu ermitteln. In Visual Basic .NET hingegen ist dies nicht ohne Plattformaufrufe oder die Analyse eines Stackframes aus dem Stacktrace möglich. Wir wollen hier nicht auf die zweite der genannten Methoden eingehen, sondern ein Beispiel angeben, bei dem ermittelt werden soll, ob das Schließen durch das Herunterfahren des Betriebssystems ausgelöst wurde. Dazu wird die Fensterprozedur des Formular nach den Windows-Nachrichten WM_QUERYENDSESSION und WM_ENDSESSION abgehört und eine Eigenschaft SystemShutdown auf True gesetzt. In der Behandlungsroutine für das Ereignis Closing des Formulars kann anschließend durch Prüfen der Eigenschaft ermittelt werden, ob der Grund für das Schließen das Herunterfahren des Systems war.

Beispielprojekt (CloseWindow.zip)

Projekt im Visual-Basic-.NET-2003-Format.

MinMaxFormSize

Formulare stellen die Eigenschaften MinimumSize und MaximumSize zur Verfügung. In der Version 1.0 des .NET Frameworks hatte das Setzen dieser Eigenschaften für Formulare, die als untergeordnete MDI-Formulare angezeigt wurden, keine Auswirkung. Will man trotzdem auf die beiden Eigenschaften auch bei MDI-Unterformularen nicht verzichten, dann kann man in der Fensterprozedur des Formulars die Windows-Nachricht WM_GETMINMAXINFO abfangen. Bei jedem Eintreffen einer solchen Nachricht werden die Größenangaben für die minimale und maximale Größe des Fensters in eine Struktur vom Typ MINMAXINFO kopiert.

Zusätzlich zu den beiden Eigenschaften stellt die Klasse ExtendedForm noch die Eigenschaften MaximizedLocation und MaximumTrackSize bereit. MaximizedLocation gibt die Position an, an der das Formular im maximierten Zunstand angezeigt werden soll (nach Ändern der Eigenschaft MaximumSize muß das Formular nicht mehr den gesamten Bildschirmbereich einnehmen).

Beispielprojekt (MinMaxFormSize.zip)

Projekt im Visual-Basic-.NET-2003-Format.

SimpleNotifyIcon

Dieses Beispiel ist an Programmierneulinge gerichtet und demonstriert die Möglichkeiten der Klasse NotifyIcon. Im Infobereich der Taskleiste von Windows können Anwendungen Symbole ablegen. Das hinzugefügte Symbol empfängt und verarbeitet einige Mausereignisse und ist mit einem Kontextmenü versehen. Die Klasse NotifyIcon implementiert nur eine Teilmenge der Möglichkeiten, die neuere Versionen von Windows für Benachrichtigungssymbole bereitstellen.

Beispielprojekt (SimpleNotifyIcon.zip)

Projekt im Visual-Basic-.NET-2003-Format.

Screenshot

In diesem Beispiel wird gezeigt, wie man unter Verwendung von Funktionen aus dem Windows-GDI-API ein Bildschirmfoto erstellen kann, um dieses anschließend in einem Bitmap-Objekt abzulegen. Die Klasse ScreenshotGenerator stellt eine Eigenschaft Window zur Verfügung, in der die Fensterzugriffsnummer des einzufangenden Fensters angegeben werden kann. Wird keine Zugriffsnummer angegeben, dann wird der gesamte Desktopinhalt eingefangen. Zuerst wird über GetWindowRect die Größe des Fensters ermittelt und eine Bitmap entsprechender Größe angelegt. Daraufhin wird mittels der Plattformfunktion StretchBlt der Inhalt des Gerätekontexts des angegebenen Fensters in die Bitmap kopiert und diese zurückgegeben. Anschließend wird das Bildschirmphoto in einem PictureBox-Steuerelement angezeigt, welches sich in einem scrollbaren Container befindet.

Beispielprojekt (Screenshot.zip)

Projekt im Visual-Basic-.NET-2003-Format.