只有当鼠标悬停在GUI上时,如何才允许使用GUI进行操作

问题描述 投票:0回答:1

我只想在鼠标悬停GUI时允许使用我创建的GUI进行操作。现在我可以通过ESC关闭我的GUI,但只有当我用鼠标悬停GUI时才能这样做。

  • 我怎样才能做到这一点?

在我的一个爱好项目中,我尝试了一些微型游戏的东西。现在我想在Autoit中做点什么。以下代码只是一个例子。当你能给我一些提示时,我会增加我的GUI。

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

$hGUI = GUICreate("GameTryout", 500, 500, -1, -1)
$cEdit = GUICtrlCreateEdit("test", 20, 20, 200, 100)
GUISetState(@SW_SHOW, $hGUI)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            GUIDelete($hGui)
            Exit
    EndSwitch
WEnd
  • 如果不使用鼠标在GUI上,我怎么能避免关闭我的GUI?

谢谢你的建议。

user-interface mouseover autoit
1个回答
0
投票

您可以使用MouseGetPos()WinGetPos()来检查鼠标光标是否悬停在GUI上。 _isMouseOnGui()应符合您的要求:

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

$hGUI = GUICreate("GameTryout", 500, 500, -1, -1)
$cEdit = GUICtrlCreateEdit("test", 20, 20, 200, 100)
GUISetState(@SW_SHOW, $hGUI)

Func _isMouseOnGui($hGui)
    Local $aMouse = MouseGetPos()
    Local $aGui   = WinGetPos($hGui)

    If $aMouse[0] >= $aGui[0] And _
       $aMouse[1] >= $aGui[1] And _
       $aMouse[0] <= $aGui[0] + $aGui[2] And _
       $aMouse[1] <= $aGui[1] + $aGui[3] Then
       Return True
    EndIf

    Return False
EndFunc

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            If _isMouseOnGui($hGui) Then
                GUIDelete($hGui)
                Exit
            EndIf
    EndSwitch
WEnd

仅通过检查窗口/ GUI位置和鼠标位置来扩展GUI操作以用于将来的功能。

© www.soinside.com 2019 - 2024. All rights reserved.