Rubrik: Oberfläche · Menüs | VB-Versionen: VB4, VB5, VB6 | 05.01.01 |
Fenster manipulieren Viele Sachen sind unverständlicherweise nicht in die Eigenschaftsliste von Formen aufgenommen worden. Zu den besonders stark vertretenen gehört nach... | ||
Autor: Wolfgang Kluge | Bewertung: | Views: 44.908 |
www.vbwelt.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Viele Sachen sind unverständlicherweise nicht in die Eigenschaftsliste von Formen aufgenommen worden. Zu den besonders stark vertretenen gehört nach wie vor die MDI-Form. Doch manche wollen nicht auf diverse Einstellungen verzichten.
Einige wollen z.B. nicht, daß der Maximieren-Button aktiv ist....
Die Lösung bietet - wie in so vielen Fällen - die Windows-API.
Das ganze funktioniert natürlich auch bei "normalen" Fenstern...
Private Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nindex As Long, _ ByVal dwnewlong As Long) As Long Private Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nindex As Long) As Long Private Const GWL_STYLE = (-16) Private Const GWL_EXSTYLE = (-20) Private Declare Function GetSystemMenu Lib "user32" ( _ ByVal hwnd As Long, _ ByVal bRevert As Long) As Long Public Declare Function RemoveMenu Lib "user32" ( _ ByVal hMenu As Long, _ ByVal nPosition As Long, _ ByVal wFlags As Long) As Long Public Const MF_BYCOMMAND = &H0& Public Const SC_CLOSE = &HF060 Public Const SC_MAXIMIZE = &HF030 Public Const SC_MINIMIZE = &HF020 Public Const SC_RESTORE = &HF120
Für die Buttons selbst würden die ersten vier genügen. Doch gibts ja auch noch ein Systemmenü.
' Titelbar weglassen ' Dazu muß nicht wie sonst die Caption auf "" ' gestellt werden.. Dim ret As Long ret = GetWindowLong(Me.hWnd, GWL_STYLE) SetWindowLong Me.hWnd, GWL_STYLE, ret And Not &HC00000 ' Minimieren unterbinden Dim ret As Long, hMen As Long hMen& = GetSystemMenu(Me.hwnd, False) RemoveMenu hMen, SC_MINIMIZE, MF_BYCOMMAND ret = GetWindowLong(Me.hwnd, GWL_STYLE) SetWindowLong Me.hwnd, GWL_STYLE, ret And Not &H20000 ' Maximieren unterbinden Dim ret As Long, hMen As Long hMen = GetSystemMenu(Me.hwnd, False) RemoveMenu hMen, SC_MAXIMIZE, MF_BYCOMMAND ret = GetWindowLong(Me.hwnd, GWL_STYLE) SetWindowLong Me.hwnd, GWL_STYLE, ret And Not &H10000 ' Schließen unterbinden Dim hMen As Long hMen = GetSystemMenu(Me.hwnd, False) RemoveMenu hMen, SC_CLOSE, MF_BYCOMMAND ' MDI-Form als ToolWindow Dim ret As Long ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE) SetWindowLong Me.hWnd, GWL_EXSTYLE, ret Or &H80