1. Herfried K. Wagner’s VB.Any
  2. .NET
  3. Beispiele

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 Schliessen 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 Schliessen 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 anschliessend durch Prüfen der Eigenschaft ermittelt werden, ob der Grund für das Schliessen 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össenangaben für die minimale und maximale Grösse 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 muss 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 Bildschirmphoto erstellen kann, um dieses anschliessend 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össe des Fensters ermittelt und eine Bitmap entsprechender Grösse angelegt. Daraufhin wird mittels der Plattformfunktion StretchBlt der Inhalt des Gerätekontexts des angegebenen Fensters in die Bitmap kopiert und diese zurückgegeben. Anschliessend 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.