Is this doing what you are looking for?
While 1
$msg = TrayGetMsg()
$xmsg = GUIGetMsg()
Select
Case $xmsg = $sent1
WinSetState("CONTROL", "", @SW_HIDE)
Case $msg = $Show
WinSetState("CONTROL", "", @SW_SHOW)
Case $msg = $Hide
WinSetState("CONTROL", "", @SW_HIDE)
Case $msg = $about
MsgBox(64, "about:", "MyProgram 1.0")
Case $msg = $exit
; Delete the tray items and close the GUI
TrayItemDelete($Show)
TrayItemDelete($spacer1)
TrayItemDelete($about)
TrayItemDelete($spacer2)
TrayItemDelete($Hide)
TrayItemDelete($spacer3)
TrayItemDelete($exit)
TrayItemDelete($spacer4)
GUIDelete()
ExitLoop
Case $xmsg = $GUI_EVENT_CLOSE
GUISetState(@SW_HIDE)
Case $xmsg = $GUI_EVENT_MINIMIZE
GUISetState(@SW_HIDE)
Case $msg = $TRAY_EVENT_PRIMARYDOUBLE
GUISetState(@SW_SHOW)
EndSelect
WEnd