Bonjour, j'ai une fenêtre (GUI) à manipuler, créée avec
GUICreate(), dont je connais le Handle, et dont je voudrais modifier le style étendu (Ex_Style).
Elle possède 2 CheckBoxes :
- Une contrôlant la mise sur le devant ("Always on Top" ou "Topmost")
- Une contrôlant l'apparence ("Normale" ou "Tooltip")
Voilà un script de test, je me suis basé sur l'exemple de la fonction GUISetStyle :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt('MustDeclareVars', 1)
Example()
Func Example()
Local $hWnd, $bsStyle, $lStyle, $NewStyle, $Msg, $aTemp, $GuiStyleGen = BitOR($WS_POPUP, $WS_CLIPSIBLINGS, $WS_CAPTION, $WS_SYSMENU, $WS_SIZEBOX, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX), $GuiStyleFix = 1, $GuiStyleDo, $OnTopGen = 0, $OnTopDo = 0, $OnTopFix = 1, $MiniDo = 0, $Reponse
$Reponse = InputBox(@ScriptName, "Le style de la fenêtre sera fixé sur :" & @CRLF & "BitOR($WS_POPUP, $WS_CLIPSIBLINGS, $WS_CAPTION, $WS_SYSMENU, $WS_SIZEBOX, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX) = [0x]84CF0000", Hex($GuiStyleGen))
If $Reponse <> "" Then $GuiStyleGen = Dec($Reponse)
$Reponse = MsgBox(0x104, @ScriptName, "Désirez-vous que le style de la fenêtre soit variable ?")
If $Reponse = 6 Then $GuiStyleFix = 0 ;Si oui : Désynchronisation (dynamique) potentielle
$GuiStyleDo = $GuiStyleGen ;Synchronisation
$Reponse = MsgBox(0x104, @ScriptName, "Désirez-vous que la fenêtre soit créée sur le dessus ?")
If $Reponse = 6 Then $OnTopGen = $WS_EX_TOPMOST ;Si oui
$Reponse = MsgBox(0x104, @ScriptName, "Désirez-vous inverser la mise sur le dessus après création ?")
If $Reponse = 6 Then $OnTopFix = 0 ;Si oui : Désynchronisation prévue
$OnTopDo = $OnTopGen ;Synchronisation
$Reponse = MsgBox(0x104, @ScriptName, "Souhaitez-vous une fenêtre créée en mode Tooltip ?")
If $Reponse = 6 Then $MiniDo = $WS_EX_TOOLWINDOW ;Si oui
$hWnd = GUICreate("Gui Style", 260, 100, 300, 100, $GuiStyleGen, BitOR($MiniDo, $OnTopGen))
$lStyle = GUICtrlCreateLabel('MiniDo = 0x' & Hex($MiniDo, 2) & @CRLF & 'OnTopDo = ' & $OnTopDo & @CRLF & "OnTopGen = " & $OnTopGen, 0, 0, 300, 50)
$bsStyle = GUICtrlCreateButton("Set Style", 45, 50, 150, 20)
GUISetState()
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
Case $bsStyle
If $GuiStyleFix = 0 Then ;Récupération du style existant
$aTemp = GUIGetStyle($hWnd) ;[GUIStyle, GUIStyleEx]
$GuiStyleDo = $aTemp[0] ;GUIStyle
;Test alternatif :
;$GuiStyleDo = -1
EndIf
$MiniDo = $WS_EX_TOOLWINDOW - $MiniDo ;Inversion du style étendu "tooltip"
If $OnTopFix = 0 Then $OnTopDo = $WS_EX_TOPMOST - $OnTopDo ;Inversion du style étendu "ontop"
GUISetStyle($GuiStyleDo, BitOR($MiniDo, $OnTopDo), $hWnd)
GUICtrlSetData($lStyle, 'MiniDo = 0x' & Hex($MiniDo, 2) & @CRLF & 'OnTopDo = ' & $OnTopDo & @CRLF & "OnTopGen = " & $OnTopGen)
$NewStyle = Not $NewStyle ;Changement de style
If $NewStyle Then
GUICtrlSetData($bsStyle, 'Undo Style')
Else
GUICtrlSetData($bsStyle, 'Set Style')
EndIf
Case Else
EndSwitch
WEnd
EndFunc ;==>Example
J'ai quelques soucis, voici la liste des opérations qui n'ont pas le résultat escompté :
- Une fois la fenêtre créée sur le devant, impossible de la remettre en plan normal
- Une fois la fenêtre créée en plan normal, impossible de la remettre sur le devant
- La conservation du style par un
GUIGetStyle() ne fonctionne pas
- Le style de
GUISetStyle("-1", Extended) ne permet pas la modification du style étendu
J'aimerais pouvoir modifier la mise en Topmost de ma fenêtre sans avoir à la déconstruire systématiquement. De même, je souhaiterais changer les styles étendus d'une fenêtre sans toucher au style principal en cours, mais GUIGetState ne répond pas à mon besoin, et GUISetState ne permet pas de passer un paramètre "-1" en premier pour modifier l'étendu ensuite.
Pourriez-vous m'aider ?
Merci d'avance,
D.
Edition du 9/10/2011 : Le thread est résolu, mais la fonction GUIGetStyle() renvoie une valeur actuellement fausse, et GUISetStyle() ne permet pas la gestion du mode onTop, il faut utiliser une autre fonction.