Cette petite source vous montreras comment hooker une fenêtre, c'est-à-dire intercepter certains messages Windows à destination d'une fenêtre, et ainsi interprêter ces messages à votre façon.
Le hooking est utilisé ici pour limiter le redimensionnement d'une feuille à une taille minimale et maximale pour la largeur et la hauteur (personnalisable bien sûr).
Vous pouvez ainsi laissez vos feuilles redimensionnables, et si vous voulez imposer une taille minimale et maximale à vos feuille, c'est possible avec cette source.
Auparavant, j'utilisais une méthode bien moins esthétique : je désactivais le focus de la feuille, la redimensionnais, et lui redonnais le focus. Ainsi, la feuille avait bien des limites de taille, mais on perdais le redimensionnement dès que la feuille était trop grande ou trop petite. Avec cette source, vous pouvez faire de même, mais vous garder la possibilité de redimensionner la feuille en lui imposant des limites tout de même.
Il vous suffit de cliquer sur le bouton "limiter le dimensionnement" pour modifier la procédure de fenêtre et ainsi, limiter le redimensionnement.
Source / Exemple :
'Fonction principale pour limiter le redimensionnement :
Public Function LimiterDimensionFeuille(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'=========================================================================================================
'Nouvelle fonction de traitement de message de la fenêtre pour intercepter les messages et la magnétiser
'=========================================================================================================
'on active la routine de traitement d'erreur
On Error Resume Next
'l'erreur etant minime, on continue l'éxécution normalement
'déclaration des variables privées
Dim rctPosition As RECT 'stocke la position et la taille de la fenêtre
Dim bQuitter As Boolean 'stocke l'état d'activation de sortie de la fonction
'on initialise l'état de sortie de la fonction
Let bQuitter = False
'on évite de traiter le message si l'ancienne fonction est invalide
If lAncienneFonction = 0 Then Exit Function
'on intercepte le message de début de déplacement ou de redimensionnement et on le traire
If wMsg = WM_ENTERSIZEMOVE Then
'on récupère la position de la feuille et de la souris
Call GetWindowRect(hWnd, rctPosition)
'on récupère les messages de redimensionnement et de déplacement et on les traite
ElseIf wMsg = WM_SIZING Then
'On récupère la position de fenêtre
Call CopyMemory(rctPosition, ByVal lParam, Len(rctPosition))
'on définit la taille de la feuille selon le changement de taille
If rctPosition.Right - rctPosition.Left < lWidthMin Then
Let rctPosition.Right = rctPosition.Left + lWidthMin
ElseIf rctPosition.Right - rctPosition.Left > lWidthMax Then
Let rctPosition.Right = rctPosition.Left + lWidthMax
End If
If rctPosition.Bottom - rctPosition.Top < lHeightMin Then
Let rctPosition.Bottom = rctPosition.Top + lHeightMin
ElseIf rctPosition.Bottom - rctPosition.Top > lHeightMax Then
Let rctPosition.Bottom = rctPosition.Top + lHeightMax
End If
'on définit la position de la fenêtre
Call CopyMemory(ByVal lParam, rctPosition, Len(rctPosition))
'on définit la valeur de la fonction de traitement de message de la fenêtre qui doit être 1
Let LimiterDimensionFeuille = 1
'pas la peine d'appeller la fonction de traitement standard.
Let bQuitter = True
End If
'on appelle la fonction de traitement standard des messages pour le reste des messages
If Not bQuitter Then Let LimiterDimensionFeuille = CallWindowProc(lAncienneFonction, hWnd, wMsg, wParam, lParam)
End Function
Conclusion :
Je ne pense pas faire de mise à jour de cette source, à moins qu'il y ai des bugs fâcheux.
Note : veuillez bien fermer le programme par le bouton de fermeture, et non à partir de VB si vous ne voulez pas fermer VB en même temps : VB n'aime pas trop qu'on modifier les procédures de fenêtres... :(
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.