Taille minimum d'une fenêtre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Taille minimum d'une fenêtre

Message par Octavius »

Je voudrais pouvoir fixer la taille minimale d'une fenêtre dont la taille est modifiable. J'ai créer un code qui fonctionne à peu près, mais le scintillement qui en résulte est très laid... Auriez-vous une idée pour améliorer ce code ? Ou carrément une autre stratégie à proposer ?

Code : Tout sélectionner

#Win=0

If OpenWindow(#Win,0,0,600,400,"Ma fenêtre",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
EndIf

Repeat
Event=WaitWindowEvent()

  Select Event
    
    Case #PB_Event_SizeWindow
    
    If WindowWidth(#Win)<200
      ResizeWindow(#Win,#PB_Ignore,#PB_Ignore,200,#PB_Ignore)
    EndIf
    If WindowHeight(#Win)<150
      ResizeWindow(#Win,#PB_Ignore,#PB_Ignore,#PB_Ignore,150)
    EndIf
    
  EndSelect
Until Event=#WM_CLOSE
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ce code empeche que la fenetre soit plus petite que 100x100 :)

Code : Tout sélectionner

; Code Purebasic 4.00
; empeche un redimentionement minimum de la fenetre


Procedure WndProc(WindowID, message, wParam, lParam)
    Result = #PB_ProcessPureBasicEvents
    *pMinMax.MINMAXINFO
    If message = #WM_GETMINMAXINFO
        *pMinMax = lParam
        *pMinMax\ptMinTrackSize\x = 100
        *pMinMax\ptMinTrackSize\y = 100
        ; Force a minimum window size for our application.
        Result = 0
        ; And clear the messages
    EndIf
    ProcedureReturn Result
EndProcedure

OpenWindow(0,0,0,640,480,"test",#PB_Window_SystemMenu|#PB_Window_SizeGadget)
SetWindowCallback(@WndProc())
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
celui ci fait l'inverse !! :)
il empeche que la fenetre soit plus grande que 200x200

Code : Tout sélectionner

; Code Purebasic 4.00
; empeche un redimentionement maximum de la fenetre


Procedure WndProc(WindowID, message, wParam, lParam)
    Result = #PB_ProcessPureBasicEvents
    *pMinMax.MINMAXINFO
    If message = #WM_GETMINMAXINFO
        *pMinMax = lParam
        *pMinMax\ptMaxTrackSize\x = 200
        *pMinMax\ptMaxTrackSize\y = 200
        ; Force a minimum window size for our application.
        Result = 0
        ; And clear the messages
    EndIf
    ProcedureReturn Result
EndProcedure

OpenWindow(0,0,0,200,200,"test",#PB_Window_SystemMenu|#PB_Window_SizeGadget)
SetWindowCallback(@WndProc())
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

Génial merci! :D

Est-ce que tu pourrais m'expliquer le principe de fonctionnement de SetWindowCallback() ? J'ai beau lire l'aide de PB, je comprends pas grand chose... :oops:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Répondre