Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
CallWindowProc and WM_GetMinMaxInfo
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Fonctions Windows API
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows XP SP2
Divers
Thread ID:
01392525
Message ID:
01392657
Vues:
52
My mistake. I read through your example and understand it much better now and it's working exactly as I'd hoped it would. To explain the "why" a bit - I'm applying constraints on the height and width of the form, based on what edge or corner of the screen the user is resizing. Because the controls inside the form are anchored to resize with the form, I want to keep the user from extending the window (and inner controls) in either dimension beyond a certain aspect ratio. In other words, I want to prevent them from making the screen look really ugly <g>.

This was the last piece I needed to be able to do this. I tried setting Thisform.MaxWidth and ThisForm.MaxHeight inside the the event bound resizing, but that isn't imposed until after the resize is done. This actually interrupts it and sets it during the resize, which is perfect.

Thanks again, Sergey.

I'll post this as a reference for anyone else that might be looking to do something similar down the road.
Values Before Event: 
lnMaxSizeX = 1926
lnMaxSizeY = 1206
lnMaxPosX = -3
lnMaxPosY = -3
lnMinTrackSizeX = 6
lnMinTrackSizeY = 6
lnMaxTrackSizeX = 5532
lnMaxTrackSizeY = 1212

Values Before Event: 
lnMaxSizeX = 1926
lnMaxSizeY = 1206
lnMaxPosX = -3
lnMaxPosY = -3
lnMinTrackSizeX = 200
lnMinTrackSizeY = 300
lnMaxTrackSizeX = 400
lnMaxTrackSizeY = 1000
Example code in the event handler:
LPARAMETERS tu1, tu2, tu3, lParam
*

loWas = NEWOBJECT("WinApiSupport", "WinLib.fxp")  
CrLf = CHR(13) + CHR(10)

lnMaxSizeX = loWas.Long2NumFromBuffer(lParam+8) 
lnMaxSizeY = loWas.Long2NumFromBuffer(lParam+12)
lnMaxPosX = loWas.Long2NumFromBuffer(lParam+16) 
lnMaxPosY = loWas.Long2NumFromBuffer(lParam+20)
lnMinTrackSizeX = loWas.Long2NumFromBuffer(lParam+24) 
lnMinTrackSizeY = loWas.Long2NumFromBuffer(lParam+28) 
lnMaxTrackSizeX = loWas.Long2NumFromBuffer(lParam+32) 
lnMaxTrackSizeY = loWas.Long2NumFromBuffer(lParam+36) 

=STRTOFILE( CrLf + ;
            "Values Before Event: " + CrLf + ;
            "lnMaxSizeX = " + TRANSFORM(lnMaxSizeX) + CrLf + ; 
            "lnMaxSizeY = " + TRANSFORM(lnMaxSizeY) + CrLf + ;
            "lnMaxPosX = " + TRANSFORM(lnMaxPosX) + CrLf + ; 
            "lnMaxPosY = " + TRANSFORM(lnMaxPosY) + CrLf + ;
            "lnMinTrackSizeX = " + TRANSFORM(lnMinTrackSizeX) + CrLf + ; 
            "lnMinTrackSizeY = " + TRANSFORM(lnMinTrackSizeY) + CrLf + ;
            "lnMaxTrackSizeX = " + TRANSFORM(lnMaxTrackSizeX) + CrLf + ; 
            "lnMaxTrackSizeY = " + TRANSFORM(lnMaxTrackSizeY) + CrLf + ;
            CrLf, "TestMinMax.txt", 1)
           
***Hardcoding for POC right now. This should cause the window to be constrained to 
***these min and max dimensions during a resize.           
lnMinTrackSizeX = 200
lnMinTrackSizeY = 300
lnMaxTrackSizeX = 400
lnMaxTrackSizeY = 1000

WITH loWas
  lcNewMinMax = .Num2Long(lnMinTrackSizeX) + ;
                .Num2Long(lnMinTrackSizeY) + ;
                .Num2Long(lnMaxTrackSizeX) + ;
                .Num2Long(lnMaxTrackSizeY)
ENDWITH           

*--Copy values back to lParam at offset 24, just the min and max tracking values.
= SYS(2600, lParam+24, 16, lcNewMinMax)

*--For testing, retrieve again to verify that they're set correctly
lnMaxSizeX = loWas.Long2NumFromBuffer(lParam+8) 
lnMaxSizeY = loWas.Long2NumFromBuffer(lParam+12)
lnMaxPosX = loWas.Long2NumFromBuffer(lParam+16) 
lnMaxPosY = loWas.Long2NumFromBuffer(lParam+20)
lnMinTrackSizeX = loWas.Long2NumFromBuffer(lParam+24) 
lnMinTrackSizeY = loWas.Long2NumFromBuffer(lParam+28) 
lnMaxTrackSizeX = loWas.Long2NumFromBuffer(lParam+32) 
lnMaxTrackSizeY = loWas.Long2NumFromBuffer(lParam+36) 

=STRTOFILE( CrLf + ;
            "Values Before Event: " + CrLf + ;
            "lnMaxSizeX = " + TRANSFORM(lnMaxSizeX) + CrLf + ; 
            "lnMaxSizeY = " + TRANSFORM(lnMaxSizeY) + CrLf + ;
            "lnMaxPosX = " + TRANSFORM(lnMaxPosX) + CrLf + ; 
            "lnMaxPosY = " + TRANSFORM(lnMaxPosY) + CrLf + ;
            "lnMinTrackSizeX = " + TRANSFORM(lnMinTrackSizeX) + CrLf + ; 
            "lnMinTrackSizeY = " + TRANSFORM(lnMinTrackSizeY) + CrLf + ;
            "lnMaxTrackSizeX = " + TRANSFORM(lnMaxTrackSizeX) + CrLf + ; 
            "lnMaxTrackSizeY = " + TRANSFORM(lnMaxTrackSizeY) + CrLf + ;
            CrLf, "TestMinMax.txt", 1)
            
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform