vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Oberfläche · Fenster   |   VB-Versionen: VB4, VB5, VB607.08.03
Fenster-Vollbildmodus

Ein Tipp der zeigt, wie sich ein Fenster über den kompletten Bildschirm anzeigen lässt.

Autor:   Ralf HähnelBewertung:     [ Jetzt bewerten ]Views:  29.056 
www.hippsoft.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Manchmal möchte man, dass der Clientbereich eines Fenster den gesamten Bildschirm ausfüllt, also ganz so wie in Powerpoint oder Excel. WindowState ist dafür ungeeignet, es kann zwar das Fenster maximieren, aber die Titel- und die Taskleiste bleiben nach wie vor sichtbar.

Also bleibt uns nichts weiter übrig, uns ein weiteres Mal mit den API's herumzuschlagen.

Folgender Code muss in ein Standardmodul:

Option Explicit
 
' Fenstertext ändern
Public Declare Function SetWindowText Lib "user32" _
  Alias "SetWindowTextA" ( _
  ByVal hwnd As Long, _
  ByVal lpString As String) As Long
 
' automatische Aktualisierung eines Fensters sperren/setzen
Public Declare Function LockWindowUpdate Lib "user32.dll" ( _
  ByVal hwnd As Long) As Long
 
' ermittelt das Fensterhandle des Desktop's
Public Declare Function GetDesktopWindow Lib "user32" () As Long
 
' ändert die Position eines Fensters oder Controls
Public Declare Function SetWindowPos Lib "user32" ( _
  ByVal hwnd As Long, _
  ByVal hWndInsertAfter As Long, _
  ByVal x As Long, _
  ByVal Y As Long, _
  ByVal cx As Long, _
  ByVal cy As Long, _
  ByVal wFlags As Long) As Long
 
Public Const HWND_NOTOPMOST = -2
Public Const SWP_FRAMECHANGED = &H20
 
' Fensterstil ermitteln
Public Declare Function GetWindowLong Lib "user32" _
  Alias "GetWindowLongA" ( _
  ByVal hwnd As Long, _
  ByVal nIndex As Long) As Long
 
Public Const GWL_STYLE = (-16)
 
' Fensterstil ändern
Public Declare Function SetWindowLong Lib "user32" _
  Alias "SetWindowLongA" ( _
  ByVal hwnd As Long, _
  ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long
 
Public Const WS_CAPTION = &HC00000
Public Const WS_THICKFRAME As Long = &H40000
 
' ermittelt die Fenstergröße
Public Declare Function GetWindowRect Lib "user32" ( _
  ByVal hwnd As Long, _
  lpRect As RECT) As Long
 
Public Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type
 
' ermittelt das Handle des SystemMenüs
Public Declare Function GetSystemMenu Lib "user32" ( _
  ByVal hwnd As Long, _
  ByVal bRevert As Long) As Long
 
' löscht ein Menü oder Menüpunkt
Public Declare Function DeleteMenu Lib "user32" ( _
  ByVal hMenu As Long, _
  ByVal nPosition As Long, _
  ByVal wFlags As Long) As Long
 
' zeichnet ein Menü neu
Public Declare Function DrawMenuBar Lib "user32" ( _
  ByVal hwnd As Long) As Long
 
Public Const SC_MINIMIZE As Long = &HF020
Public Const SC_MOVE As Long = &HF010
Public Const SC_RESTORE As Long = &HF120
Public Const SC_SIZE As Long = &HF000
Public Const SC_MAXIMIZE As Long = &HF030
Public Const SC_SYSSEPERATOR As Long = &H0
Public Const SC_CLOSE As Long = &HF060
Public Const MF_BYCOMMAND = &H0
 
Private Type FullViewStateType
  ' 0=None, 1=Normal(Min/Max/Normal), 2=Vollansicht
  bytState As Byte  
  tWinRect As RECT
  lWinStyle As Long
End Type
 
Private tWinState As FullViewStateType
' Schaltet den Vollbild-Modus ein/aus
' bState:     True=Vollbild-Modus / False=Normalmodus
' bMenuClose: False=löscht den Schließen-Befehl des 
'             Systemmenüs im Vollbildmodus
Public Sub FullView(Form As Form, _
  ByVal bState As Boolean, _
  Optional ByVal bMenuClose As Boolean = True)
 
  Dim lStyle As Long
  Dim hMenu As Long
 
  ' - Vollansicht nur dann aktivieren, wenn Vollansicht 
  '   noch nicht aktiv ist
  ' - Normalansicht nur aktivieren, wenn Vollansicht 
  '   aktiv ist
  If (tWinState.bytState = 2) = bState Then Exit Sub 
 
  ' Aktualisierung des Desktops unterbinden
  LockWindowUpdate GetDesktopWindow  
 
  With Form
    ' Vollansicht aktivieren
    If bState Then
 
      ' Status auf Vollansicht setzen
      tWinState.bytState = 2
 
      ' aktuelle Fensterposition & -größe ermitteln
      ' wird beim Beenden des Vollbildmodus zum
      ' Wiederherstellen des Fensters benötigt
      GetWindowRect .hwnd, tWinState.tWinRect
 
      ' Fensterstil ermitteln
      tWinState.lWinStyle = GetWindowLong(.hwnd, GWL_STYLE)
 
      ' Titelleiste und (Größenänderungs-)Rahmen entfernen
      lStyle = tWinState.lWinStyle And _
        Not (WS_CAPTION Or WS_THICKFRAME)
      SetWindowLong .hwnd, GWL_STYLE, lStyle
 
      ' Fenstergröße auf Bildschirm-Größe setzen
      SetWindowPos .hwnd, HWND_NOTOPMOST, 0, 0, _
        Screen.Width \ Screen.TwipsPerPixelX, _
        Screen.Height \ Screen.TwipsPerPixelY, _
        SWP_FRAMECHANGED
 
      ' Handle des SystemMenüs ermitteln
      hMenu = GetSystemMenu(.hwnd, 0&)      
 
      ' Einträge aus dem SystemMenü entfernen
      If hMenu Then
        ' Wiederherstellen
        Call DeleteMenu(hMenu, SC_RESTORE, MF_BYCOMMAND)
        ' Verschieben
        Call DeleteMenu(hMenu, SC_MOVE, MF_BYCOMMAND)
        ' Größe ändern
        Call DeleteMenu(hMenu, SC_SIZE, MF_BYCOMMAND)
        ' Minimieren
        Call DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)
        ' Maxminieren
        Call DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND)
        ' Trennlinie
        Call DeleteMenu(hMenu, SC_SYSSEPERATOR, MF_BYCOMMAND)
        If bMenuClose = False Then
          ' Schließen
          Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
        End If
      End If
 
    Else     
 
      ' Status auf Normalansicht setzen
      tWinState.bytState = 1        
 
      ' Fenstergröße wiederherstellen
      With tWinState.tWinRect
        SetWindowPos Form.hwnd, HWND_NOTOPMOST, _
        .Left, .Top, .Right - .Left, .Bottom - .Top, _
        SWP_FRAMECHANGED
      End With  
 
      ' Fensterstil wiederherstellen
      SetWindowLong .hwnd, GWL_STYLE, tWinState.lWinStyle  
 
      ' Systemmenü wiederherstellen
      GetSystemMenu .hwnd, True
    End If
 
    ' Systemmenü neu zeichnen
    DrawMenuBar .hwnd
 
  End With
 
  ' Desktop kann wieder aktualisiert werden
  LockWindowUpdate 0&
End Sub
' Vollansicht-Status ermitteln
Public Function FullViewState() As Boolean
  FullViewState = (tWinState.bytState = 2)
End Function

Ändern Sie während des Vollbild-Modus den Fenstertitel, stellt VB die Titelleiste wieder her. Wenn Sie den Fenstertitel denoch ändern möchten/müssen, müssen Sie das auch per API tun.

Folgender Code muss dazu auch noch in's Standardmodul:

' Fenstertitel ermitteln
Public Property Get WinCaption(Form As Form) As String
  WinCaption = Form.Caption
End Property
 
' Fenstertitel festlegen
Public Property Let WinCaption(Form As Form, _
  ByVal sWinCaption As String)
 
  SetWindowText Form.hwnd, sWinCaption
End Property

Aufrufbeispiel:

' aktiviert den Vollbildmodus
' der Systemmenü-Eintrag <Schließen> 
' wird außerdem entfernt
FullView Me, True, False
' deaktiviert den Vollbild-Modus
FullView Me, False
' Fenstertitel ändern
WinCaption(Me) = "Neuer Fenstertitel"

Dieser Tipp wurde bereits 29.056 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel