| |
|
|
Georg Teles | avec cela peut sich qui Fenstergröße pour Belieben begrenzen - qui Message zum Changement qui Position / Taille des Fensters wird aufgefangen, modifié & à cela la fenêtre versendet
'###############################################
'# #
'# Fenstergröße begrenzen mittels MINMAXINFO #
'# #
'# Georg Teles am 27.12.2018 #
'# #
'###############################################
$H structs.ph
$H windows.ph
$H messages.ph
Déclarer OldWndProc&, ico&, e%
'-------------# Definitionen
Def GetWindowLong(2)!"User32","GetWindowLongA"
Def SetWindowLong(3)!"User32","SetWindowLongA"
Def CallWindowProc(5)!"User32","CallWindowProcA"
Def RtlMoveMemory(3)!"KERNEL32","RtlMoveMemory"
'-------------# Strukturen
'reserviert, aucun Verwendung
Struct ptReserved = ptReservedX&, ptReservedY&
'maximale Breite (x) & Hauteur (y) beim Maximierten la fenêtre
Struct ptMaxSize = ptMaxSizeX&, ptMaxSizeY&
'Position à gauche (x) & dessus (y) beim Maximierten la fenêtre
Struct ptMaxPosition = ptMaxPositionX&, ptMaxPositionY&
'kleinste Breite (x) & Hauteur (y) beim agrandir/Verkleindern des Fensters
Struct ptMinTrackSize = ptMinTrackSizeX&, ptMinTrackSizeY&
'größte Breite (x) & Hauteur (y) beim agrandir/Verkleindern des Fensters
Struct ptMaxTrackSize = ptMaxTrackSizeX&, ptMaxTrackSizeY&
'MINMAXINFO Struktur
Struct MinMax = ptReserved, ptMaxSize, ptMaxPosition, ptMinTrackSize, ptMaxTrackSize
'Variable pour MINMAXINFO
Déclarer MMI#
Faible MMI#, MinMax
'-------------# CallBack Routine
Proc WindowProc
Paramètres hWnd&, Message&, wParam&, lParam&
' alternativ dans qui Boucle régulariser
'Si Message& = ~WM_KEYFIRST ' TASTEN auswertung
'Cas WParam& = 27:~PostQuitMessage(0) 'zB %Key = 27 pour ESC
'Endif
Si Message& = ~WM_GETMINMAXINFO' Message auffangen
' Pointer lParam auffangen et MMI füllen
RtlMoveMemory(MMI#, lParam&, SizeOf(MMI#))
' Werte pour Belieben anpassen
'-------------# Alternative 1
With MMI#
.ptMinTrackSizeX& = 355
.ptMinTrackSizeY& = 282
.ptMaxTrackSizex& = 500
.ptMaxTrackSizey& = 500
Endwith
'-------------# Alternative 2
'MMI#.ptMinTrackSizeX& = 355
'MMI#.ptMinTrackSizeY& = 282
'MMI#.ptMaxTrackSizex& = 500
'MMI#.ptMaxTrackSizey& = 500
' MMI dem lParam Pointer wieder zuweisen
RtlMoveMemory(lParam&, MMI#, SizeOf(MMI#))
EndIf
' alternativ dans qui Boucle régulariser
'Si Message& = ~wm_Destroy
' ~PostQuitMessage(0)
'Endif
Retour CallWindowProc(OldWndProc&, hWnd&, Message&, wParam&, lParam&)
ENDPROC
'-------------# Programme
Set("Fastmode",1)
Set("TrueColor",1)
Windowtitle "Fenstergröße Begrenzen"
Fenêtre 100,100 - 355,282
ico& = Créer("hIcon",Par$(0),0)' Icon erwünscht ?
SendMessage(%HWnd,$80,1,ico&)' Icon mettons
SetWindowLong(%HWnd,-16,$92CE0000)' passenden Style choisir
OldWndProc& = GetWindowLong(%hWnd, -4)' original WndProc Sauver
SetWindowLong(%hWnd, -4, ProcAddr("WindowProc",4))' WindowProc zuweisen
WhileNot e%
Waitinput
Si %Key = 27
Inc e%
ElseIf %Key = 2
Inc e%
EndIf
Endwhile
SetWindowLong(%hWnd, -4, OldWndProc&)' original WndProc wiederherstellen
DeleteObject ico&
DisPose MMI#
Grüße Georg |
|
|
| |
|
|