;/Constantes Window
Enumeration
#Window_0
EndEnumeration
;/Constantes Gadget
Enumeration
#Btn_Quit
EndEnumeration
;/ Constantes StatusBar
Enumeration
#StatusBar
EndEnumeration
;/ on cré le tableau de 3 éléments qui contient la taille des champs de la StatusBar
;/ tableau utilisé dans la CallBack
Dim Champs.l(2)
Global HwndSTB ; Handle StatusBar
Global Ratio ; le rapport entre la taille d'origine et la maxi de la fenêtre
Global Dimensionnement ; pour savoir s'il faut agrandir ou réduire la StatusBar
Procedure CallBack(Hnd,Msg,wParam,lParam)
Resultat = #PB_ProcessPureBasicEvents
Select Msg
Case #WM_SIZE
ResizeGadget(#Btn_Quit,(WindowWidth()/2)-50,WindowHeight()-50,-1,-1)
;/ Avec WM_SIZE, la largeur de la fenêtre vaut LOWORD(lParam)
;/ Avec WM_SIZE, la hauteur de la fenêtre vaut HIWORD(lParam)
;/ nWidth = LOWORD(lParam); // width of client area
;/ nHeight = HIWORD(lParam); // height of client area
Largeur = lParam & $FFFF ; nouvelle largeur de la fenêtre
;/ le ratio entre l'ancienne taille et la nouvelle taille des champs de la statusBar (3 champs)
;/ ce ratio n'est calculé qu'une fois, il pourrait être calculé d'une autre manière
If Ratio = -1
Ratio = (lParam & $FFFF ) / 300 ; 300 = largeur initiale fenêtre
EndIf
;/ on défini la taille de chaque Champ avec le ratio calculé plus haut
;/ le dernier champ doit valoir -1, ici Champs(2)
For i = 0 To 1
If Dimensionnement = 1
Champs(i) = Champs(i) * Ratio
Else
Champs(i) = Champs(i) / Ratio
EndIf
Next
If Dimensionnement = 1
Dimensionnement -1 ; on remet la variable à 0
Else
Dimensionnement +1 ; on remet la variable à 1
EndIf
;/ on redimensionne les 3 champs de la statusBar
SendMessage_(HwndSTB, #SB_SETPARTS, 3, @Champs(0))
;/ on redessine la statusBar immédiatement pour que les changements soient pris en compte
MoveWindow_(HwndSTB, 0, 0, 0, 0, #True)
Resultat = 0
EndSelect
ProcedureReturn Resultat
EndProcedure
If OpenWindow(#Window_0, 300, 300, 300, 200, #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget, "Fenêtre 1",0)
SetWindowCallback(@CallBack())
Ratio = -1 ; on initialise à -1 cette variable car on ne calcule le ration qu'une fois
Dimensionnement = 1 ; = 1 la fenêtre a la taille d'rigine sino = 0 elle est
HwndSTB = CreateStatusBar(#StatusBar, WindowID(#Window_0))
Champs(0) = 40
AddStatusBarField(Champs(0)) : WinWidth = WindowWidth()-40
Champs(1) = WinWidth /2
AddStatusBarField(Champs(1))
Champs(2) = WinWidth /2
AddStatusBarField(Champs(2))
; La dernière valeur du tableau doit valoir -1 pour le message #SB_SETPARTS
Champs(2) = -1
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Btn_Quit, 100, WindowHeight()-50, 100, 25, "Quitter")
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
;Case
;Case
Case #Btn_Quit : quit = 1
EndSelect
;Case
;Case
Case #PB_EventCloseWindow : quit = 1
EndSelect
Until quit = 1
End
EndIf
Par contre, ça me semble un peu plus compliqué que le bout de code de Nico.
Mais je le garde quand même, ça peut certainement être utile dans certains cas.
De toute façon, c'etait juste pour savoir comment redimensionner la SB, je n'en ai pas vraiment besoin pour le moment.