Here my take on it :
#include <WinAPISys.au3>
#include <GDIPlus.au3>
#include <GuiConstants.au3>
Opt("MustDeclareVars", True)
Global $hGUI, $hGUI2, $hGUI3
Example()
Func Example()
_GDIPlus_Startup()
$hGUI = GUICreateEx("main.png", 100, 100)
$hGUI2 = GUICreateEx("item.png", 150, 400, $hGUI)
$hGUI3 = GUICreateEx("item.png", 400, 400, $hGUI)
GUIRegisterMsg($WM_NCHITTEST, WM_NCHITTEST)
GUIRegisterMsg($WM_MOUSELEAVE, WM_MOUSELEAVE)
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
_GDIPlus_Shutdown()
EndFunc ;==>Example
Func GUICreateEx($sImage, $iPosX = -1, $iPosY = -1, $hParent = 0)
Local $hImage = _GDIPlus_ImageLoadFromFile($sImage)
Local $hWnd = GUICreate("", -1, -1, $iPosX, $iPosY, $WS_POPUP, BitOR($WS_EX_LAYERED, $hParent ? $WS_EX_MDICHILD : 0), $hParent)
Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_WinAPI_UpdateLayeredWindowEx($hWnd, -1, -1, $hBitmap)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_ImageDispose($hImage)
GUISetState()
Return $hWnd
EndFunc ;==>GUICreateEx
Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hGUI
Return $HTCAPTION
Case $hGUI2
ConsoleWrite("hovering GUI2" & @CRLF)
Case $hGUI3
ConsoleWrite("hovering GUI3" & @CRLF)
EndSwitch
_WinAPI_TrackMouseEvent($hWnd, $TME_LEAVE)
EndFunc ;==>WM_NCHITTEST
Func WM_MOUSELEAVE($hWnd, $msg, $wParam, $lParam)
ConsoleWrite("leaving " & $hWnd & @CRLF)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MOUSELEAVE
Func GUIUpdate($sImage, $hWnd)
Local $hImage = _GDIPlus_ImageLoadFromFile($sImage)
Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_WinAPI_UpdateLayeredWindowEx($hWnd, -1, -1, $hBitmap)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_ImageDispose($hImage)
EndFunc ;==>GUIUpdate