Re: [R] Limiter la zone de déplacement du GUI
Posté : mar. 24 mai 2011 18:47
la fonction ci-dessous ne déplace pas les gui filles, mais ne limite pas les mouvements de la fenêtre principale !
► Afficher le texte
Communauté Francophone AutoIt
https://autoitscript.fr/forum/
Code : Tout sélectionner
#include <StructureConstants.au3>
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $skype, $gimp
Global $iX_Min = 100, $iX_Max = @DesktopWidth - 600, $iY_Min = 100, $iY_Max = @DesktopHeight - 600
$hGUI1 = GUICreate("Test", 500, 500, -1, -1)
GUISetBkColor(0xaa0000)
GUISetState()
$hGUI2 = GUICreate("", 500, 500, -1, -1, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST + $WS_EX_COMPOSITED + $WS_EX_MDICHILD, $hGUI1)
MySplash($skype, @ScriptDir&"\skype.bmp", 1500, 1 , 100,100,100,100)
MySplash($gimp, @ScriptDir&"\gimp.bmp", 1500, 1 , 200,100,100,100)
GUISetBkColor(0xFF00FF)
_WinAPI_SetLayeredWindowAttributes($hGUI2, 0xFF00FF)
GUISetState()
GUIRegisterMsg($WM_WINDOWPOSCHANGING, "WM_WINDOWPOSCHANGING")
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func WM_WINDOWPOSCHANGING($hWnd, $Msg, $wParam, $lParam)
Local $stWinPos = DllStructCreate("uint;uint;int;int;int;int;uint", $lParam)
Local $iLeft = DllStructGetData($stWinPos, 3)
Local $iTop = DllStructGetData($stWinPos, 4)
Local $iWidth = DllStructGetData($stWinPos, 5)
Local $iHeight = DllStructGetData($stWinPos, 6)
If $iLeft < $iX_Min Then DllStructSetData($stWinPos, 3, $iX_Min)
If $iTop < $iY_Min Then DllStructSetData($stWinPos, 4, $iY_Min)
If $iLeft > $iX_Max Then DllStructSetData($stWinPos, 3, $iX_Max)
If $iTop > $iY_Max Then DllStructSetData($stWinPos, 4, $iY_Max)
EndFunc
Func MySplash($pic, $Path_Logo, $Time_Splash, $Blink, $Xlogo, $Ylogo, $newW, $newH)
$pic = GUICtrlCreatePic ($Path_Logo, $Xlogo, $Ylogo, $newW, $newH)
GUICtrlSetState($pic, $GUI_ONTOP)
EndFunc ;==>MySplash
En avançant dans mon script je viens de constater que si je crée plusieurs Gui filles qui normalement doivent suivre ma Gui principale grâce à l'option $WS_EX_MDICHILD, lorsque je bouge la gui principale vers la gauche, les gui filles suivent alors que si je déplace la Gui principale vers la droite, les gui filles se placent tout à coup l'une sur l'autre à l'origine de la Gui principale.
Alors que si je commente la ligne , GUIRegisterMsg($WM_WINDOWPOSCHANGING, "WM_WINDOWPOSCHANGING") , je n'ai plus bien sure les limites en x et y mais je n'ai plus ce problème de superposition des gui filles !
J'en étais resté là... bien sûr que c'est la fonction déjà mentionnée, mais la différence c'est qu'avec 2 guis et des bitmaps, là ça fonctionne...Tlem a écrit :Je n'ai pas de réponse.
Il va adorerTlem a écrit :... pierrotm777 se bloque souvent par la complexité de son code sans savoir réellement ce qu'il fait.
peux-tu expliquer "format de fichier propriétaire" ?pierrotm777 a écrit :....un menu dont les labels proviennent d'un format de fichier propriétaire
On peut dire ça ...pierrotm777 a écrit :Tlem en toujours aussi dur ! Je suppose que c'est pour mon bien ?