找回密码
 加入
搜索
楼主: 沉默的斗鱼

[GUI管理] 纯png背景和按钮界面,如何再添加按钮和更改按钮尺寸和添加鼠标动作?

  [复制链接]
 楼主| 发表于 2018-4-25 01:24:43 | 显示全部楼层
回复 13# kk_lee69


    经过反复测试,发现鼠标动作是执行在按钮上方的文字上的,如果鼠标点击不到上方文字而点击到图片按钮其他位置,鼠标动作不会执行,如何把鼠标动作更改到图片按钮上而不是文字区域呢?
发表于 2018-4-25 01:30:07 | 显示全部楼层
回复 14# 沉默的斗鱼

比如给按钮2添加动作,执行一次后第二次就会鼠标按上和按下按钮图片不会更改,按下其他按钮后再按下按钮2方能执行动作和变换按钮背景图片,不知道这是为何,

這句話不懂


每按一个按钮执行动作而不是用变量定义整体动作。

當然可以 可是 你這樣用這個技術含量高的用意在哪  因為就等同把這個 結構都破掉了...........
发表于 2018-4-25 01:42:59 | 显示全部楼层
回复 16# 沉默的斗鱼

改這樣 你就可以知道 按鈕到底是誰在控制的  也可以達到你要的目錄 分別 做動作

#include <WinAPI.au3>
#include <GDIPlus.au3>
 
Opt("TrayAutoPause", 0)
OnAutoItExitRegister("DisposeAll")
 
_GDIPlus_Startup()
 
Global $GT = "GUI Title", $ImgA[3], $PosA[7][2], $BBT[5], $BBTA[5][3], $But[3], $ButA[3][3], $BBTNum = 4
 
; loading images
$ImgA[0] = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\anniu1a.png")
$ImgA[1] = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\anniu1b.png")
$ImgA[2] = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\anniu4a.png")
Local $Img1 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\bg.png")
Local $Img2 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\title_button.png")
 
; main GUI with title
Global $USWin = GUICreate($GT, 528, 440, -1, -1, 0x80000000, BitOR(0x00080000, 0x00000008));, 0x80)
Local $hGraphic1a = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
Local $hBitmapa = _GDIPlus_BitmapCreateFromGraphics(528, 440, $hGraphic1a)
Local $hGraphic2a = _GDIPlus_ImageGetGraphicsContext($hBitmapa)
_GDIPlus_GraphicsDrawImageRect($hGraphic2a, $Img1, 88, 0, 440, 440)
_GDIPlus_GraphicsDrawImageRect($hGraphic2a, $Img2, 138, 5, 198, 45)
_GDIPlus_GraphicsDrawString_($hGraphic2a, $GT, 148, 11, "Comic Sans MS", 12)
_GDIPlus_GraphicsDispose($hGraphic2a)
_GDIPlus_GraphicsDispose($hGraphic1a)
SetBitmap($USWin, $hBitmapa, 255)
_GDIPlus_GraphicsDispose($hBitmapa)
_GDIPlus_ImageDispose($Img1)
_GDIPlus_ImageDispose($Img2)
 
; position labels for all buttons
$PosA[1][0] = GUICtrlCreateLabel("",450, 99, 157, 30); tab buttons
$LAB1=$PosA[1][0]

$PosA[2][0] = GUICtrlCreateLabel("",350 , 150, 157, 30)
$LAB2=$PosA[2][0]

$PosA[3][0] = GUICtrlCreateLabel("",200, 165, 157, 30)
$LAB3=$PosA[3][0]

$PosA[4][0] = GUICtrlCreateLabel("",100, 198, 157, 30)
$LAB4=$PosA[4][0]

$PosA[$BBTNum + 1][0] = GUICtrlCreateLabel("", 137, 402, 160, 35); save button
$PosA[$BBTNum + 2][0] = GUICtrlCreateLabel("", 317, 402, 160, 35); close button
For $i = 1 To $BBTNum + 2
        $PosA[$i][1] = 0
Next
 
; tab button 1
$BBT[1] = GUICreate($GT, 165, 227, 450, 100, 0x80000000, BitOR(0x00080000, 0x00000008, 0x00000040, 0x08000000), $USWin)
DrawImg2($BBTA, 1, $ImgA, "", 10, 4, "Comic Sans MS", 11)
SetBitmap($BBT[1], $BBTA[1][2], 255); set the first tab button as pressed
 
; tab button 2
$BBT[2] = GUICreate($GT, 165, 227, 350, 133, 0x80000000, BitOR(0x00080000, 0x00000008, 0x00000040, 0x08000000), $USWin)
DrawImg3($BBTA, 2, $ImgA, "", 10, 4, "Comic Sans MS", 11)
SetBitmap($BBT[2], $BBTA[2][0], 255)
 
; tab button 3
$BBT[3] = GUICreate($GT, 165, 227, 200, 166, 0x80000000, BitOR(0x00080000, 0x00000008, 0x00000040, 0x08000000), $USWin)
DrawImg($BBTA, 3, $ImgA, "", 10, 4, "Comic Sans MS", 11)
SetBitmap($BBT[3], $BBTA[3][0], 255)
 
; tab button 4
$BBT[4] = GUICreate($GT, 165, 227, 100, 199, 0x80000000, BitOR(0x00080000, 0x00000008, 0x00000040, 0x08000000), $USWin)
DrawImg($BBTA, 4, $ImgA, "", 10, 4, "Comic Sans MS", 11)
SetBitmap($BBT[4], $BBTA[4][0], 255)
 
; save button
$But[1] = GUICreate($GT, 345, 38, 138, 405, 0x80000000, BitOR(0x00080000, 0x00000008, 0x00000040, 0x08000000), $USWin)
DrawImg($ButA, 1, $ImgA, "Save", 10, 4, "Comic Sans MS", 11)
SetBitmap($But[1], $ButA[1][0], 255)
 
; close button
$But[2] = GUICreate($GT, 345, 38, 318, 405, 0x80000000, BitOR(0x00080000, 0x00000008, 0x00000040, 0x08000000), $USWin)
DrawImg($ButA, 2, $ImgA, "Close", 10, 4, "Comic Sans MS", 11)
SetBitmap($But[2], $ButA[2][0], 255)
 
; release loaded images
_GDIPlus_ImageDispose($ImgA[0])
_GDIPlus_ImageDispose($ImgA[1])
_GDIPlus_ImageDispose($ImgA[2])
 

 
; show all GUIs - kind of like an animation effect
GUISetState(@SW_SHOW, $USWin)
For $i = 1 To $BBTNum
        GUISetState(@SW_SHOW, $BBT[$i])
Next
GUISetState(@SW_SHOW, $But[1])
GUISetState(@SW_SHOW, $But[2])

 
; set the first tab button as pressed
$curr = 1
;$prev = 0
 
While 1
        For $i = 1 To $BBTNum + 2; 4 tabs + 2 buttons
                Switch $i
                        Case 1 To $BBTNum; tab buttons - 2-state
                                If $curr = $i Then ContinueLoop; don't check the state of the current tab
                                $pos = GUIGetCursorInfo($USWin)
                                If $pos[4] = $PosA[$i][0] Then
                                        If $pos[3] = 1 Then ExitLoop
                                        If $pos[2] = 1 Then ExitLoop
                                        While $pos[4] = $PosA[$i][0]
                                                If GUIGetMsg() = -3 Then Exit
                                                $pos = GUIGetCursorInfo($USWin)
                                                Switch $pos[2]
                                                        Case 0; not pressed
                                                                If $PosA[$i][1] <> 1 Then
                                                                        SetBitmap($BBT[$i], $BBTA[$i][1], 255)
                                                                        $PosA[$i][1] = 1
                                                                EndIf
                                                        Case 1; pressed - change tab
                                                                If $PosA[$i][1] <> 2 Then
                                                                        SetBitmap($BBT[$curr], $BBTA[$curr][0], 255)
                                                                        SetBitmap($BBT[$i], $BBTA[$i][2], 255)
                                                                        $PosA[$i][1] = 2
                                                                        ;$prev = $curr
                                                                        $curr = $i
                                                                                                                                                IF $PosA[$i][0]=$LAB1 Then
                                                                        _WinAPI_ShowMsg("這是第1個按鈕")
                                                                                                                                                EndIf
                                                                                                                                                IF $PosA[$i][0]=$LAB2 Then
                                                                        _WinAPI_ShowMsg("這是第2個按鈕")
                                                                                                                                                EndIf
                                                                                                                                                IF $PosA[$i][0]=$LAB3 Then
                                                                        _WinAPI_ShowMsg("這是第3個按鈕")
                                                                                                                                                EndIf
                                                                                                                                                IF $PosA[$i][0]=$LAB4 Then
                                                                        _WinAPI_ShowMsg("這是第4個按鈕")
                                                                                                                                                EndIf
                                                                        ExitLoop
                                                                EndIf
                                                EndSwitch
                                                Sleep(10)
                                        WEnd
                                        If $curr <> $i Then SetBitmap($BBT[$i], $BBTA[$i][0], 255)
                                        $PosA[$i][1] = 0
                                EndIf
                        Case Else; save and close buttons - 3-state
                                $pos = GUIGetCursorInfo($USWin)
                                If $pos[4] = $PosA[$i][0] Then
                                        If $pos[3] = 1 Then ExitLoop
                                        If $pos[2] = 1 Then ExitLoop
                                        While $pos[4] = $PosA[$i][0]
                                                $pos = GUIGetCursorInfo($USWin)
                                                Switch $pos[2]
                                                        Case 0; not pressed
                                                                If $PosA[$i][1] <> 1 Then
                                                                        SetBitmap($But[$i - $BBTNum], $ButA[$i - $BBTNum][1], 255)
                                                                        $PosA[$i][1] = 1
                                                                EndIf
                                                        Case 1
                                                                While $pos[2] = 1; holding pressed
                                                                        $pos = GUIGetCursorInfo($USWin)
                                                                        Switch $pos[4]
                                                                                Case $PosA[$i][0]; on button, pressed
                                                                                        If $PosA[$i][1] <> 2 Then
                                                                                                SetBitmap($But[$i - $BBTNum], $ButA[$i - $BBTNum][2], 255)
                                                                                                $PosA[$i][1] = 2
                                                                                        EndIf
                                                                                Case Else; not on button, pressed
                                                                                        If $PosA[$i][1] <> 3 Then
                                                                                                SetBitmap($But[$i - $BBTNum], $ButA[$i - $BBTNum][1], 255)
                                                                                                $PosA[$i][1] = 3
                                                                                        EndIf
                                                                        EndSwitch
                                                                        Sleep(10)
                                                                WEnd
                                                                If $pos[4] = $PosA[$i][0] Then
                                                                        Switch $i - $BBTNum
                                                                                Case 1; save button pressed
                                                                                        MsgBox(0 + 262144, $GT, "Saved")
                                                                                Case 2; close button pressed
                                                                                        Exit
                                                                        EndSwitch
                                                                EndIf
                                                EndSwitch
                                                Sleep(10)
                                        WEnd
                                        SetBitmap($But[$i - $BBTNum], $ButA[$i - $BBTNum][0], 255)
                                        $PosA[$i][1] = 0
                                EndIf
                EndSwitch
        Next
        Switch GUIGetMsg(); this is for tab controls
                Case -3
                        Exit

        EndSwitch
        Sleep(10)
WEnd
 
Func DisposeAll()
        For $i = 1 To $BBTNum
                _GDIPlus_BitmapDispose($BBTA[$i][0])
                _GDIPlus_BitmapDispose($BBTA[$i][1])
                _GDIPlus_BitmapDispose($BBTA[$i][2])
        Next
        For $i = 1 To 2
                _GDIPlus_BitmapDispose($ButA[$i][0])
                _GDIPlus_BitmapDispose($ButA[$i][1])
                _GDIPlus_BitmapDispose($ButA[$i][2])
        Next
EndFunc   ;==>DisposeAll
 
Func DrawImg(ByRef $RetA, $indx, $Imgs, $text, $xx, $yy, $sFont = "Comic Sans MS", $nSize = 10, $ncol = "000000", $iFormat = 0)
        For $i = 0 To 2
                Local $hGraphic1 = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
                Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics(165, 38, $hGraphic1)
                Local $hGraphic2 = _GDIPlus_ImageGetGraphicsContext($hBitmap)
                _GDIPlus_GraphicsDrawImageRect($hGraphic2, $Imgs[$i], 0, 0, 165, 38)
                _GDIPlus_GraphicsDrawString_($hGraphic2, $text, $xx, $yy, $sFont, $nSize, $ncol, $iFormat)
                _GDIPlus_GraphicsDispose($hGraphic2)
                _GDIPlus_GraphicsDispose($hGraphic1)
                $RetA[$indx][$i] = $hBitmap
        Next
EndFunc   ;==>DrawImg

Func DrawImg2(ByRef $RetA, $indx, $Imgs, $text, $xx, $yy, $sFont = "Comic Sans MS", $nSize = 10, $ncol = "000000", $iFormat = 0)
        For $i = 0 To 2
                Local $hGraphic1 = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
                Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics(165, 38, $hGraphic1)
                Local $hGraphic2 = _GDIPlus_ImageGetGraphicsContext($hBitmap)
                _GDIPlus_GraphicsDrawImageRect($hGraphic2, $Imgs[$i], 0, 0, 46, 46)
                _GDIPlus_GraphicsDrawString_($hGraphic2, $text, $xx, $yy, $sFont, $nSize, $ncol, $iFormat)
                _GDIPlus_GraphicsDispose($hGraphic2)
                _GDIPlus_GraphicsDispose($hGraphic1)
                $RetA[$indx][$i] = $hBitmap
        Next
EndFunc   ;==>DrawImg

Func DrawImg3(ByRef $RetA, $indx, $Imgs, $text, $xx, $yy, $sFont = "Comic Sans MS", $nSize = 10, $ncol = "000000", $iFormat = 0)
        For $i = 0 To 2
                Local $hGraphic1 = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
                Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics(165, 128, $hGraphic1)
                Local $hGraphic2 = _GDIPlus_ImageGetGraphicsContext($hBitmap)
                _GDIPlus_GraphicsDrawImageRect($hGraphic2, $Imgs[$i], 0, 0, 128, 128)
                _GDIPlus_GraphicsDrawString_($hGraphic2, $text, $xx, $yy, $sFont, $nSize, $ncol, $iFormat)
                _GDIPlus_GraphicsDispose($hGraphic2)
                _GDIPlus_GraphicsDispose($hGraphic1)
                $RetA[$indx][$i] = $hBitmap
        Next
EndFunc   ;==>DrawImg

Func _GDIPlus_GraphicsDrawString_($hGraphics, $sString, $nX, $nY, $sFont = "Comic Sans MS", $nSize = 10, $ncol = "000000", $iFormat = 0)
        If StringLeft($ncol, 2) = "0x" Then $ncol = StringTrimLeft($ncol, 2)
        Local $hBrush = _GDIPlus_BrushCreateSolid("0xFF" & $ncol)
        Local $hFormat = _GDIPlus_StringFormatCreate($iFormat)
        Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
        Local $hFont = _GDIPlus_FontCreate($hFamily, $nSize)
        Local $tLayout = _GDIPlus_RectFCreate($nX, $nY, 0, 0)
        Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)
        Local $aResult = _GDIPlus_GraphicsDrawStringEx($hGraphics, $sString, $hFont, $aInfo[0], $hFormat, $hBrush)
        Local $iError = @error
        _GDIPlus_FontDispose($hFont)
        _GDIPlus_FontFamilyDispose($hFamily)
        _GDIPlus_StringFormatDispose($hFormat)
        _GDIPlus_BrushDispose($hBrush)
        Return SetError($iError, 0, $aResult)
EndFunc   ;==>_GDIPlus_GraphicsDrawString_
 
Func SetBitmap($hGUI, $hImage, $iOpacity)
    Local $hScrDC = _WinAPI_GetDC(0)
    Local $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    Local $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate("long X;long Y")
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate("long X;long Y")
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate("byte Op;byte Flags;byte Alpha;byte Format")
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", 1)
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, 0x02)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
EndFunc   ;==>SetBitmap
发表于 2018-4-25 11:00:12 | 显示全部楼层
本帖最后由 水木子 于 2018-4-25 11:21 编辑

感觉没必要搞这么复杂吧!
#include <WinAPI.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include 'GUICtrlOnHover.au3'

Global $aPic[9]
Global $iNumber = 3
Global $iSpacingX = 100, $iSpacingY = 100
Global $iLeft = 60, $iTop = 50
Global $iButtonWidth = 80, $iButtonHeight = 80

_GDIPlus_Startup()
$hImage1 = _GDIPlus_ImageLoadFromFile('1.png')
$hImage2 = _GDIPlus_ImageLoadFromFile('2.png')
$hImage3 = _GDIPlus_ImageLoadFromFile('3.png')
GUIRegisterMsg($WM_PAINT, 'MY_WM_PAINT')

$hGui1 = GUICreate('', 400, 400)

For $i = 0 To UBound($aPic) - 1
        $aPic[$i] = GUICtrlCreatePic('', $iSpacingX * Mod($i, $iNumber) + $iLeft, $iSpacingY * Floor($i / $iNumber) + $iTop, $iButtonWidth, $iButtonHeight)
        GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
        _GUICtrl_SetOnHover(-1, '_Hover_Proc', '_Leave_Hover_Proc', 'PrimaryDown_Proc', 'PrimaryUp_Proc')
Next

Global $hPic1 = _GDIPlus_GraphicsCreateFromHWND($hGui1)
GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $aPic[0] To $aPic[UBound($aPic) - 1]
                        $iIndex = $nMsg - $aPic[0]
                        _GDIPlus_GraphicsDrawImageRect($hPic1, $hImage3, $iSpacingX * Mod($iIndex, $iNumber) + $iLeft, $iSpacingY * Floor($iIndex / $iNumber) + $iTop, $iButtonWidth, $iButtonHeight)
;~                         MsgBox(0, 0, '按钮 - ' & $iIndex + 1)

        EndSwitch

WEnd

_GDIPlus_GraphicsDispose($hPic1)
_GDIPlus_ImageDispose($hImage1)
_GDIPlus_ImageDispose($hImage2)
_GDIPlus_ImageDispose($hImage3)
_GDIPlus_Shutdown()

Func PrimaryUp_Proc($iCtrlID)
        Switch $iCtrlID
                Case $aPic[0] To $aPic[UBound($aPic) - 1]
                        $iZ = $iCtrlID - $aPic[0]
                        _GDIPlus_GraphicsDrawImageRect($hPic1, $hImage1, $iSpacingX * Mod($iZ, $iNumber) + $iLeft, $iSpacingY * Floor($iZ / $iNumber) + $iTop, $iButtonWidth, $iButtonHeight)
        EndSwitch
EndFunc   ;==>_Hover_Proc

Func _Hover_Proc($iCtrlID)
        Switch $iCtrlID
                Case $aPic[0] To $aPic[UBound($aPic) - 1]
                        $iZ = $iCtrlID - $aPic[0]
                        _GDIPlus_GraphicsDrawImageRect($hPic1, $hImage2, $iSpacingX * Mod($iZ, $iNumber) + $iLeft, $iSpacingY * Floor($iZ / $iNumber) + $iTop, $iButtonWidth, $iButtonHeight)
        EndSwitch
EndFunc   ;==>_Hover_Proc

Func _Leave_Hover_Proc($iCtrlID)
        Switch $iCtrlID
                Case $aPic[0] To $aPic[UBound($aPic) - 1]
                        $iZ = $iCtrlID - $aPic[0]
                        _GDIPlus_GraphicsDrawImageRect($hPic1, $hImage1, $iSpacingX * Mod($iZ, $iNumber) + $iLeft, $iSpacingY * Floor($iZ / $iNumber) + $iTop, $iButtonWidth, $iButtonHeight)
        EndSwitch
EndFunc   ;==>_Leave_Hover_Proc

Func MY_WM_PAINT($hWnd, $msg, $wParam, $lParam)
        _WinAPI_RedrawWindow($hGui1, 0, 0, $RDW_UPDATENOW)

        For $i = 0 To UBound($aPic) - 1
                _GDIPlus_GraphicsDrawImageRect($hPic1, $hImage1, $iSpacingX * Mod($i, $iNumber) + $iLeft, $iSpacingY * Floor($i / $iNumber) + $iTop, $iButtonWidth, $iButtonHeight)
        Next
        
        _WinAPI_RedrawWindow($hGui1, 0, 0, $RDW_VALIDATE)
        Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_PAINT


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2018-4-25 13:05:30 | 显示全部楼层
回复 1# 沉默的斗鱼


    给你个例子!
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include 'GUICtrlOnHover.au3'
#Region ### START Koda GUI section ### Form=

$Form1 = GUICreate("Form1", 800, 570,-1, -1,BitOR($WS_POPUP, $WS_CLIPSIBLINGS))
$Pic = GUICtrlCreatePic("1.jpg", 0, 0, 800, 570)
GUICtrlSetState(-1, $GUI_DISABLE)

$Pic1 = GUICtrlCreatePic("1-1.bmp", 720, 5, 32, 18)
_GUICtrl_SetOnHover(-1, '_Hover_Proc', '_Leave_Hover_Proc', 'PrimaryDown_Proc', 'PrimaryUp_Proc')
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)


$Pic2 = GUICtrlCreatePic("0-1.bmp", 760, 5, 32, 18)
_GUICtrl_SetOnHover(-1, '_Hover_Proc', '_Leave_Hover_Proc', 'PrimaryDown_Proc', 'PrimaryUp_Proc')
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

$Pic3 = GUICtrlCreatePic("2-1.bmp", 50, 250, 170, 156)
_GUICtrl_SetOnHover(-1, '_Hover_Proc', '_Leave_Hover_Proc', 'PrimaryDown_Proc', 'PrimaryUp_Proc')
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

$Pic4 = GUICtrlCreatePic("3-1.bmp", 300,250, 170, 156)
_GUICtrl_SetOnHover(-1, '_Hover_Proc', '_Leave_Hover_Proc', 'PrimaryDown_Proc', 'PrimaryUp_Proc')
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

$Pic5 = GUICtrlCreatePic("4-1.bmp", 550, 250, 170, 156)
_GUICtrl_SetOnHover(-1, '_Hover_Proc', '_Leave_Hover_Proc', 'PrimaryDown_Proc', 'PrimaryUp_Proc')
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

$Label1 = GUICtrlCreateLabel("", 650, 500, 120, 17)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$Label2 = GUICtrlCreateLabel(@OSVersion &" "&@OSArch, 650, 547, 100, 17)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)

;WinSetOnTop($Form1,"",1);设置窗口置顶.
;WinSetTrans($Form1, "", 200);透明窗口
GUISetState(@SW_SHOW)

#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $Pic1 ;最小化
                        WinSetState($Form1, "", @SW_MINIMIZE)
                Case $Pic2
                        Exit
                       Case $Pic3
                        MsgBox(0, " ","目前没有定义 !")
                Case $Pic4
                        MsgBox(0, " ","目前没有定义 !")
                Case $Pic5
                        MsgBox(0, " ","目前没有定义 !")
                Case $GUI_EVENT_MOUSEMOVE
                        Local $A = GUIGetCursorInfo($Form1)
                        If Not @error Then
                          
                                If $A[0] > -1 And $A[0] < 800 And $A[1] > -1 And $A[1] < 570 Then
                                    GUICtrlSetData($Label1, "(鼠标位置: " & Int( $A[0]) & "," & Int($A[1]) & ")")
                                EndIf
                        EndIf

        EndSwitch
WEnd

Func _Hover_Proc($iCtrlID)
        Switch $iCtrlID
                Case $Pic1
                        GUICtrlSetImage($Pic1,"1-2.bmp")
                Case $Pic2
                        GUICtrlSetImage($Pic2,"0-2.bmp")
                Case $Pic3
                        GUICtrlSetImage($Pic3,"2-2.bmp")
                Case $Pic4
                        GUICtrlSetImage($Pic4,"3-2.bmp")
                Case $Pic5
                        GUICtrlSetImage($Pic5,"4-2.bmp")                
        EndSwitch
EndFunc   ;==>_Hover_Proc

Func _Leave_Hover_Proc($iCtrlID)
        Switch $iCtrlID
                Case $Pic1
                        GUICtrlSetImage($Pic1,"1-1.bmp")
                Case $Pic2
                        GUICtrlSetImage($Pic2, '0-1.bmp')
                Case $Pic3
                        GUICtrlSetImage($Pic3, '2-1.bmp')
                Case $Pic4
                        GUICtrlSetImage($Pic4, '3-1.bmp')
                Case $Pic5
                        GUICtrlSetImage($Pic5, '4-1.bmp')                        
        EndSwitch
EndFunc   ;==>_Leave_Hover_Proc
发表于 2018-4-25 13:10:45 | 显示全部楼层
如果不明白,请看附件!   


[free][/free]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2018-4-25 13:13:09 | 显示全部楼层
回复 21# zpmc123


   因为图片只是示例,所以没有加命令,这个年老的,要是不会加命令,请留言!
 楼主| 发表于 2018-4-25 13:37:26 | 显示全部楼层
回复 20# zpmc123


    谢谢zpmc123大佬的热心,bmp做按钮我一直使用呢,做全图片gui我就一直用bmp呢,就是类似你的这种办法,论坛上你这种bmp按钮做法年老痴呆有样例,但是bmp不能支持透明,或者说透明的话就会把设置透明色的所有颜色都过滤掉了,所以我就一直想用png实现按钮图标呢,你真热心,谢谢谢!但我还是想要png做的按钮。
 楼主| 发表于 2018-4-25 13:39:47 | 显示全部楼层
回复 19# 水木子


    水木子大神出手就是厉害,用短短的变量就定义全了,可惜小弟对变量循环理解不透,不能改变某一个按钮的背景色和添加单一动作,大神就是大神呀!让人敬佩万分。
 楼主| 发表于 2018-4-25 13:46:34 | 显示全部楼层
回复 18# kk_lee69

老大吗,你对手绘和变量理解挺厉害的,太佩服了啦!



我的意思是说你的4个TAB按钮,如果你压下按钮1,执行完动作它不会自动弹起变色,你压按钮2或者3时,他就会变色弹起,我说的就是这个意思。

你的代码基本可以使用了,我是想把4个TAB按钮全部去掉,6个全部变成单独的图片按钮就可以了!水木子的很简洁,和你的结合起来估计就实现我的效果了,但是你们两写的代码各有千秋,小弟琢磨不透!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2018-4-25 13:49:27 | 显示全部楼层
回复 22# zpmc123


    不好意思,这会才刷出来图片,是年老的例子,我一直用类似的做bmp全GUI呢,年老这个代码简介,我一直用类似的办法做bmp全GUI呢。如果水木子大神的png按钮实例能做成年老这种就完美啦!
发表于 2018-4-25 14:04:50 | 显示全部楼层
回复  zpmc123


    不好意思,这会才刷出来图片,是年老的例子,我一直用类似的做bmp全GUI呢,年老这 ...
沉默的斗鱼 发表于 2018-4-25 13:49


完全可以的。
发表于 2018-4-25 15:07:54 | 显示全部楼层
回复 24# 沉默的斗鱼

水木子的 範例就是你要的 不是??
发表于 2018-4-25 15:10:56 | 显示全部楼层
本帖最后由 kk_lee69 于 2018-4-25 15:40 编辑

回复 26# 沉默的斗鱼


While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $aPic[0] To $aPic[UBound($aPic) - 1]
                        $iIndex = $nMsg - $aPic[0]
                        _GDIPlus_GraphicsDrawImageRect($hPic1, $hImage3, $iSpacingX * Mod($iIndex, $iNumber) + $iLeft, $iSpacingY * Floor($iIndex / $iNumber) + $iTop, $iButtonWidth, $iButtonHeight)
                     ;MsgBox(0, 0, '按? - ' & $iIndex + 1)
                                         
                                         IF $iIndex + 1=1   THEN  MsgBox(0,"","按下第一個按鈕  做A事件")
                                         IF $iIndex + 1=2   THEN  MsgBox(0,"","按下第二個按鈕  做B事件")
        EndSwitch

WEnd
发表于 2018-4-25 15:20:21 | 显示全部楼层
回复 25# 沉默的斗鱼

我的意思是说你的4个TAB按钮,如果你压下按钮1,执行完动作它不会自动弹起变色,你压按钮2或者3时,他就会变色弹起,我说的就是这个意思。

你的代码基本可以使用了,我是想把4个TAB按钮全部去掉


1. 按下按鈕一  這句話有問題  範例裡面  按鈕一 本來就是按下的   你認為按下一個 早就已經變色按下的按鈕 會有甚麼變化

2. 你压按钮2或者3时,他就会变色弹起    按鈕二或三 本來就沒按下  所以你按下就會變色

3.  我是想把4个TAB按钮全部去掉   你的想法 還是被限制住   從頭到尾 都沒有TAB按鈕  只有 PNG 按鈕   不然你告訴我   誰是TAB 按鈕
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-29 21:01 , Processed in 0.074819 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表