#Include <APIConstants.au3>
#Include <GDIPlus.au3>
#Include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>
Global $hBmp[4] = ['buttons.bmp', 'button1.bmp', 'button2.bmp', 'buttons_mask.bmp']
Global $ID = -1
For $i = 0 To 3
$hBmp[$i] = _WinAPI_LoadImage(0, @ScriptDir & '\' & $hBmp[$i], $IMAGE_BITMAP, 0, 0, $LR_LOADFROMFILE)
Next
_GDIPlus_Startup()
$hPng = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\background.png')
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hPng)
$hParent = GUICreate('', 122, 80, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
_WinAPI_UpdateLayeredWindowEx($hParent, -1, -1, $hBitmap, 255, 1)
_GDIPlus_ImageDispose($hPng)
_GDIPlus_Shutdown()
$hForm = GUICreate('', 104, 62, -1, -1, $WS_POPUP, -1, $hParent)
GUISetBkColor(0xB4B4B4)
$Pic = GUICtrlCreatePic('', 18, 11, 69, 40)
;~GUICtrlSetState(-1, $GUI_DISABLE)
GUIRegisterMsg($WM_MOVE, 'WM_MOVE')
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
GUIRegisterMsg($WM_SETCURSOR, 'WM_SETCURSOR')
WM_MOVE($hParent, $WM_MOVE, 0, 0)
WM_SETCURSOR($hForm, $WM_SETCURSOR, 0, 0)
GUISetState(@SW_SHOW, $hParent)
GUISetState(@SW_SHOW, $hForm)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Pic
Switch $ID
Case 1, 2
MsgBox(64, 'Test', 'Button' & $ID)
Case Else
EndSwitch
EndSwitch
WEnd
Func _GetIndex($iX, $iY)
Local $hDC, $hMemDC, $hMemSv, $iRGB
$hDC = _WinAPI_GetDC(0)
$hMemDC = _WinAPI_CreateCompatibleDC($hDC)
$hMemSv = _WinAPI_SelectObject($hMemDC, $hBmp[3])
$iRGB = _WinAPI_GetPixel($hMemDC, $iX, $iY)
_WinAPI_ReleaseDC(0, $hDC)
_WinAPI_SelectObject($hMemDC, $hMemSv)
_WinAPI_DeleteDC($hMemDC)
Switch $iRGB
Case 0xFF0000
Return 1
Case 0x00FF00
Return 2
Case Else
Return 0
EndSwitch
EndFunc ;==>_GetIndex
Func _SetBitmap($iCtrlID, $hBitmap)
Local $hPrev
$hBitmap = _WinAPI_CopyBitmap($hBitmap)
$hPrev = GUICtrlSendMsg($iCtrlID, 0x0172, $IMAGE_BITMAP, $hBitmap)
If $hPrev Then
_WinAPI_DeleteObject($hPrev)
EndIf
$hPrev = GUICtrlSendMsg($iCtrlID, 0x0173, 0, 0)
If $hPrev <> $hBitmap Then
_WinAPI_DeleteObject($hBitmap)
EndIf
EndFunc ;==>_SetBitmap
Func WM_MOVE($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hParent
Local $Pos = WinGetPos($hParent)
If IsArray($Pos) Then
WinMove($hForm, '', $Pos[0] + 9, $Pos[1] + 9)
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MOVE
Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hForm
_SendMessage($hParent, $WM_SYSCOMMAND, 0xF012, 0)
Case $hParent
Return $HTCAPTION
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NCHITTEST
Func WM_SETCURSOR($hWnd, $iMsg, $wParam, $lParam)
Local $Index
Switch $hWnd
Case $hForm
Local $aData = GUIGetCursorInfo($hForm)
$Index = _GetIndex($aData[0] - 18, $aData[1] - 11)
If $ID <> $Index Then
_SetBitmap($Pic, $hBmp[$Index])
Switch $Index
Case 1, 2
GUICtrlSetCursor($Pic, 0)
Case Else
GUICtrlSetCursor($Pic, 2)
EndSwitch
$ID = $Index
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SETCURSOR