Что нового

Cделать GUI не кликабельным, чтобы клики проходили сквозь него

tqifkwzbqwyrneo

Новичок
Сообщения
1
Репутация
0
Вот есть программа которая отрисовывает точку поверх всех окон.
Как сделать так, чтобы при нажатии мышкой по этой точке не происходило переключение на окно этой самой точки

То есть окно (точка) должно быть поверх всех окон, но оно должно быть не активным (при нажатии на точку, все клики должны проходить сквозь нее).

Сейчас проблема вот в чем:
Я когда в игре включаю эту точку, настраиваю ее посреди экрана и ... если я в игре нажимаю на мышку (клик), происходит переключение с окна игры, на окно этой точки и игра как бы зависает/сворачивается, а активным становится окно с точкой

Безымянный.png

Код:
#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

Global $iDot_Round = 1 ;Задаёт форму точки (1 - круг, 0 - квадрат).
Global $iDot_Width = 7 ;Ширина точки
Global $iDot_Height = 7 ;Высота точки
Global $sDot_Colors = "0x00FF00|0xFF0000|0xFFFF00|0x0000FF|0xFF00FF|0x00FFFF|0x000000" ;Цвета точки

Global $aDot_Colors = StringSplit($sDot_Colors, "|")
Global $iDot_Color_Index = 1
Global $hDot_GUI

HotKeySet("{F8}", "_Quit")
HotKeySet("{F7}", "_DotGUI_SwitchColor")
HotKeySet("{F5}", "_DotGUI_Show")
HotKeySet("{F6}", "_DotGUI_Hide")

$Form1 = GUICreate("Form1", 204, 259, 536, 214)
GUISetBkColor(0xFFFFFF)
$Slider1 = GUICtrlCreateSlider(8, 48, 190, 45)
GUICtrlSetData(-1, $iDot_Width)
$Slider2 = GUICtrlCreateSlider(8, 128, 190, 45)
GUICtrlSetData(-1, 50)
$Slider3 = GUICtrlCreateSlider(8, 208, 190, 45)
GUICtrlSetData(-1, 50)
$Label1 = GUICtrlCreateLabel("Размер точки", 16, 16, 107, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("Смещения в боки", 16, 96, 130, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label3 = GUICtrlCreateLabel("Смещения верх и вниз", 16, 184, 169, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)

_GUIDot_Create(0)

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            _Quit()
        Case $Slider1 ;Размер точки
            $iDot_Width = GUICtrlRead($Slider1)
            $iDot_Height = $iDot_Width
            _GUIDot_Create(1)
        Case $Slider2 ;Смещения в боки
            $iLeft = GUICtrlRead($Slider2)

            If $iLeft < 50 Then
                _GUIDot_Create(1, (@DesktopWidth / 2) - ((50 - $iLeft) * 2))
            Else
                _GUIDot_Create(1, (@DesktopWidth / 2) + $iLeft)
            EndIf
        Case $Slider3 ;Смещения верх и вниз
            $iTop = GUICtrlRead($Slider3)

            If $iTop < 50 Then
                _GUIDot_Create(1, -1, (@DesktopHeight / 2) - ((50 - $iTop) * 2))
            Else
                _GUIDot_Create(1, -1, (@DesktopHeight / 2) + $iTop)
            EndIf
    EndSwitch
WEnd

Func _GUIDot_Create($iChangeSize = 0, $iLeft = -1, $iTop = -1)
    If $iChangeSize Then
        $aWinPos = WinGetPos($hDot_GUI)

        If $iLeft <> -1 Then $aWinPos[0] = $iLeft
        If $iTop <> -1 Then $aWinPos[1] = $iTop

        WinMove($hDot_GUI, "", $aWinPos[0], $aWinPos[1], $iDot_Width, $iDot_Height)
    Else
        $hDot_GUI = GUICreate("", $iDot_Width, $iDot_Height, 837, 534, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
        _DotGUI_SwitchColor(1)
    EndIf

    If $iDot_Round Then
        Local $hRegion = _WinAPI_CreateRoundRectRgn(0, 0, $iDot_Width, $iDot_Height, $iDot_Width, $iDot_Height)
        _WinAPI_SetWindowRgn($hDot_GUI, $hRegion)
    EndIf
EndFunc

Func _Quit()
    Exit
EndFunc

Func _DotGUI_SwitchColor($iFlag = 0)
    If Eval('iFlag') = 0 And Not BitAND(WinGetState($hDot_GUI), 2) Then
        Return
    EndIf

    GUISetBkColor($aDot_Colors[$iDot_Color_Index], $hDot_GUI)

    $iDot_Color_Index += 1

    If $iDot_Color_Index > $aDot_Colors[0] Then
        $iDot_Color_Index = 1
    EndIf
EndFunc

Func _DotGUI_Show()
    GUISetState(@SW_SHOWNOACTIVATE, $hDot_GUI)
EndFunc

Func _DotGUI_Hide()
    GUISetState(@SW_HIDE, $hDot_GUI)
EndFunc
 
Последнее редактирование:
Верх