Sorry for the ambiguous nature of the subject, I'm not listing pain-relievers for those unfortunate to work on another platform but passing on some stuff that I've found playing around with controlling windows.
I found that MINWINDOW didn't work as I thought once I had created a window, so plunging into ThinkRef I have come up with this: ( Be careful this will only work on windows with a zoom box - on other types of windows this record in the WndPtr& contains different information)
DIM wndPtr& 'pointer to the window on which you are working
'you can use GET WINDOW to help you
DIM wndPeek&, theAdr&
DIM temp%
' this is where the window record contains a pointer to the zoom info
' as global coords
wndPeek& = [wndPtr&.wDataHandle&]
' get the current top
temp% = wndPeek&.userState.top%
' get the address to put the info back
theAdr& = @wndPeek&.userState.bottom%
' poke back the info
' minimumZoomHeight% is a value that you fix
' heightChrome% is to take into account scrolls bars
' and another stuff on the edges of the window
% theAdr&, ( temp% + minimumZoomHeight% + heightChrome%)
' get the current left%
temp% = wndPeek&.userState.left%
' get the address to put the info back
theAdr& = @wndPeek&.userState.right%
' poke back the info
' minimumZoomWidth% is a value that you fix
' widthChrome% is to take into account scrolls bars
' and another stuff on the edges of the window
% theAdr&, ( temp% + minimumZoomWidth% + widthChrome%)
And it's done!
if you use wndPeek&.stdState in place of wndPeek&.userState then you can fix the MAXWINDOW for zoom outs.
PS. this code is not very elegant - i'm sure that theAdr& and temp% are not needed, but it has the merit of being legible. if someone wants to optimise this code - go ahead.