VB 5/6-Tipp 0400: Minimieren und Maximieren eines Fensters verhindern
von Damian
Beschreibung
Durch das Auswerten von Klicks auf in den den sogenannten Non-Clientbereich, lässt sich das Minimieren und Maximieren eines Fensters unterbinden. Darüber hinaus können anstatt dessen eigene Funktionen treten, es wird also ein nicht standardmäßig implenetiertes, neues Event geschaffen.
Dieser Tipp wurde am 23. September 2004 von Florian Rittmeier um weitere Konstanten ergänzt.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: CallWindowProcA (CallWindowProc), GetSystemMenu, RemoveMenu, SetWindowLongA (SetWindowLong) | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Beschriftungsfeld "Label1" 'Autor: Damian 'E-Mail: Andre@webmediaworld.de Option Explicit Private Declare Function RemoveMenu Lib "user32" (ByVal _ hMenu As Long, ByVal nPosition As Long, ByVal wFlags _ As Long) As Long Private Declare Function GetSystemMenu Lib "user32" (ByVal _ hwnd As Long, ByVal bRevert As Long) As Long Const MF_BYPOSITION As Long = &H400& Private Const HTMINBUTTON As Long = 8& Private Const HTREDUCE As Long = HTMINBUTTON Private Const HTMAXBUTTON As Long = 9& Private Const HTZOOM As Long = HTMAXBUTTON Private Button As Long Private Sub Form_Load() Dim Handle As Long Handle = GetSystemMenu(Me.hwnd, False) Call RemoveMenu(Handle, 4, MF_BYPOSITION) Call RemoveMenu(Handle, 3, MF_BYPOSITION) Call Init(Me.hwnd) End Sub Private Sub Form_Unload(Cancel As Integer) Call Terminate(Me.hwnd) End Sub Public Sub NonClient_MouseMove(HitTest As Integer) Button = HitTest End Sub Public Sub NonClient_LeftMouseButton() 'Maximier Button If Button = HTZOOM Then Call Maximize_Funktion End If 'Minimier Button If Button = HTREDUCE Then Call Minimize_Funktion End If End Sub 'Dieser Code wird ausgeführt wenn Prog Maximiert werden soll Public Sub Maximize_Funktion() Label1.Caption = "Prog wird nicht maximiert." End Sub 'Dieser Code wird ausgeführt wenn Prog Minimiert werden soll Public Sub Minimize_Funktion() Label1.Caption = "Prog wird nicht minimiert." End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '--------- Anfang Modul "Module1" alias Module1.bas --------- 'Autor: Damian 'E-Mail: Andre@webmediaworld.de Option Explicit 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 CallWindowProc Lib "user32" Alias _ "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal _ hwnd As Long, ByVal Msg As Long, ByVal wParam As _ Long, ByVal lParam As Long) As Long Private Const GWL_WNDPROC As Long = (-4&) Private Const WM_DESTROY As Long = &H2& Private Const WM_NCLBUTTONDOWN As Long = &HA1& Private Const WM_NCMOUSEMOVE As Long = &HA0& Private PrevWndProc As Long Public Sub Init(hwnd As Long) PrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubWndProc) End Sub Public Sub Terminate(hwnd As Long) Call SetWindowLong(hwnd, GWL_WNDPROC, PrevWndProc) End Sub Private Function SubWndProc(ByVal hwnd As Long, ByVal Msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long If Msg = WM_DESTROY Then Call Terminate(Form1.hwnd) ElseIf Msg = WM_NCLBUTTONDOWN Then Call Form1.NonClient_LeftMouseButton ElseIf Msg = WM_NCMOUSEMOVE Then Call Form1.NonClient_MouseMove(Trim(wParam)) End If SubWndProc = CallWindowProc(PrevWndProc, hwnd, Msg, wParam, lParam) End Function '---------- Ende Modul "Module1" alias Module1.bas ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB5 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB6 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 3 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Daniel Heiß am 12.06.2005 um 21:01
Das ist doch alles viel zu kompliziert. Wenn ich verhindern will, dass sich eine Form maximiert // minimiert, dann entfehrne ich entweder die Control-Boxen, oder ich benutze folgenden Code:
Private Sub Form_Resize()
me.windowstate = 0
End Sub
Ist doch viel einfacher, oder?
Kommentar von Joe am 08.06.2002 um 21:25
Warum läuft das Ding unter XP nicht ?
Kommentar von benny am 29.01.2002 um 17:53
schön und gut der trick bloß wie geht das nun das man mdi child's nicht minimieren kann ???