我想仅在鼠标悬停在 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?
感谢您的建议。
您可以使用
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 操作以获取将来的功能。