| |
|
|
Georg Teles | Damit lässt el Fenstergröße después de Belieben begrenzen - el Message para Cambio el Position / Größe la ventana se aufgefangen, verändert & a el Ventana versendet
'###############################################
'# #
'# Fenstergröße begrenzen mittels MINMAXINFO #
'# #
'# Georg Teles al 27.12.2018 #
'# #
'###############################################
$H structs.ph
$H windows.ph
$H messages.ph
Declarar OldWndProc&, ico&, e%
'-------------# Definitionen
Def GetWindowLong(2)!"USER32","GetWindowLongA"
Def SetWindowLong(3)!"USER32","SetWindowLongA"
Def CallWindowProc(5)!"USER32","CallWindowProcA"
Def RtlMoveMemory(3)!"KERNEL32","RtlMoveMemory"
'-------------# Estructuras
'reserviert, no Verwendung
Struct ptReserved = ptReservedX&, ptReservedY&
'maximale Breite (x) & Höhe (y) beim Maximierten Ventana
Struct ptMaxSize = ptMaxSizeX&, ptMaxSizeY&
'Position links (x) & oben (y) beim Maximierten Ventana
Struct ptMaxPosition = ptMaxPositionX&, ptMaxPositionY&
'kleinste Breite (x) & Höhe (y) beim Vergrößern/Verkleindern la ventana
Struct ptMinTrackSize = ptMinTrackSizeX&, ptMinTrackSizeY&
'größte Breite (x) & Höhe (y) beim Vergrößern/Verkleindern la ventana
Struct ptMaxTrackSize = ptMaxTrackSizeX&, ptMaxTrackSizeY&
'MINMAXINFO Struktur
Struct MinMax = ptReserved, ptMaxSize, ptMaxPosition, ptMinTrackSize, ptMaxTrackSize
'Variable para MINMAXINFO
Declarar MMI#
Dim MMI#, MinMax
'-------------# CallBack Rutina
Proc WindowProc
Parámetros hWnd&, Message&, wParam&, lParam&
' alternativ en el Bucle regeln
'If Message& = ~WM_KEYFIRST ' TASTEN auswertung
'Case WParam& = 27:~PostQuitMessage(0) 'zB %Key = 27 para ESC
'Endif
If Message& = ~WM_GETMINMAXINFO' Message auffangen
' Pointer lParam auffangen y MMI füllen
RtlMoveMemory(MMI#, lParam&, SizeOf(MMI#))
' Werte después de Belieben adaptar
'-------------# 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 el lParam Pointer otra vez zuweisen
RtlMoveMemory(lParam&, MMI#, SizeOf(MMI#))
EndIf
' alternativ en el Bucle regeln
'If Message& = ~wm_Destroy
' ~PostQuitMessage(0)
'Endif
Volver CallWindowProc(OldWndProc&, hWnd&, Message&, wParam&, lParam&)
ENDPROC
'-------------# Programa
Conjunto("FastMode",1)
Conjunto("TrueColor",1)
Windowtitle "Fenstergröße Begrenzen"
Ventana 100,100 - 355,282
ico& = Crear("hIcon",Par$(0),0)' Icon erwünscht ?
SendMessage(%HWnd,$80,1,ico&)' Icon conjunto
SetWindowLong(%HWnd,-16,$92CE0000)' passenden Style wählen
OldWndProc& = GetWindowLong(%hWnd, -4)' original WndProc speichern
SetWindowLong(%hWnd, -4, ProcAddr("WindowProc",4))' WindowProc zuweisen
Sinestar encargado e%
Waitinput
If %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 |
|
|
| |
|
|