Войти

Показать полную графическую версию : [решено] Режим "Поверх всех окон" совместно с ComboBox в GUI


support23
19-12-2014, 13:00
Добрый день!
есть следующий код:


#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("WinWaitDelay", 0)
Opt("GUIOnEventMode", 1)

;ShellHook notification codes:
Global Const $HSHELL_WINDOWCREATED = 1
Global Const $HSHELL_WINDOWACTIVATED = 4

Global $bHook = 1


$hForm = GUICreate('Demo', 330, 185, -1, -1, BitOR($WS_CAPTION, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_POPUP, $DS_SETFOREGROUND), $WS_EX_TOPMOST)
GUISetOnEvent($GUI_EVENT_CLOSE, '_Main_Events')

$Checkbox1 = GUICtrlCreateCheckbox("Поверх всех окон", 10, 20, 200, 21)


$sCombo = GUICtrlCreateCombo("", 15, 50, 200, 21)
GUICtrlSetData($sCombo, "элемент0|элемент1|элемент2|элемент3|элемент4|")

$nExit_Button = GUICtrlCreateButton('Exit', 330 - 100 - 10, 130 + 10 + 10, 100, 23)
GUICtrlSetOnEvent(-1, '_Main_Events')


GUISetState(@SW_SHOW, $hForm)
GUIRegisterMsg(RegisterWindowMessage("SHELLHOOK"), "HShellWndProc")
ShellHookWindow($hForm, $bHook)



While 1
Sleep(10)
WEnd



Func _Main_Events()
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE, $nExit_Button
ShellHookWindow($hForm, 0)
Exit
EndSwitch
EndFunc

Func HShellWndProc($hWnd, $Msg, $wParam, $lParam)
Switch $wParam
Case $HSHELL_WINDOWCREATED, $HSHELL_WINDOWACTIVATED
While Not WinActive($hForm)
WinActivate($hForm)
WEnd
EndSwitch
EndFunc

;register/unregister ShellHook
Func ShellHookWindow($hWnd, $bFlag)
Local $sFunc = 'DeregisterShellHookWindow'
If $bFlag Then $sFunc = 'RegisterShellHookWindow'
Local $aRet = DllCall('user32.dll', 'int', $sFunc, 'hwnd', $hWnd)
Return $aRet[0]
EndFunc

;register window message
Func RegisterWindowMessage($sText)
Local $aRet = DllCall('user32.dll', 'int', 'RegisterWindowMessage', 'str', $sText)
Return $aRet[0]
EndFunc





Вопрос заключается в следующем:
Как сделать, чтобы по выбору Checkbox1 окно было поверх всех окон, и наоборот (теряло свойство "поверх всех окон", когда снята галка Checkbox1 ) ?
Если использовать WinSetOnTop - не работает ComboBox

Mike909
19-12-2014, 14:42
Чекбоксу задайте действие на событие , у меня так работает ваш пример.



$Checkbox1 = GUICtrlCreateCheckbox("Поверх всех окон", 10, 20, 200, 21)
GUICtrlSetOnEvent($Checkbox1, "SetOnTop")
;.....
;.....
Func SetOnTop()
If GUICtrlRead($Checkbox1) = $GUI_CHECKED then
WinSetOnTop($hForm, "", 1)
Else
WinSetOnTop($hForm, "", 0)
EndIf
EndFunc

support23
19-12-2014, 15:03
действительно, все оказалось проще чем я думал.
Ваше решение мне помогло, спасибо!

madmasles
20-12-2014, 09:48
support23,
Еще так можно сделать.;~ ...
$iCheckbox1 = GUICtrlCreateCheckbox (http://autoit-script.ru/autoit3_docs/functions/GUICtrlCreateCheckbox.htm)('Поверх всех окон', 10, 20, 200, 21)
GUICtrlSetOnEvent (http://autoit-script.ru/autoit3_docs/functions/GUICtrlSetOnEvent.htm)($Checkbox1, 'SetOnTop')
;~ ...
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) SetOnTop()
WinSetOnTop (http://autoit-script.ru/autoit3_docs/functions/WinSetOnTop.htm)($hForm, '', GUICtrlSendMsg (http://autoit-script.ru/autoit3_docs/functions/GUICtrlSendMsg.htm)($iCheckbox1, 0xF0, 0, 0));$BM_GETCHECK = 0xF0
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>SetOnTop




© OSzone.net 2001-2012