Cisoce 发表于 2009-12-23 16:28:11

如何用图片做按钮?

本帖最后由 Cisoce 于 2009-12-24 09:32 编辑

请问如何用图片做按钮控件呢?就是把按钮控件换成图片?

还有就是那个优化向导界面,是怎么做的呢,就是点击下一步,就会换一个界面那种,请高手不吝赐教谢谢

顽固不化 发表于 2009-12-23 18:43:08

理论上任何控件都响应鼠标点击,按钮控件也可做的很漂亮。忘记怎么做了。
“下一步”就删除和添加一些控件,改变一些文本。

298311657 发表于 2009-12-23 23:40:25

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include '_dButton.au3'
$Gui = GUICreate("动态按钮he控件指示", 300, 200, -1, -1, $WS_POPUP)
$ex=GUICtrlCreateLabel(" X ", 280, 2, 17, 12)
WinSetTrans($Gui, "", 255);必须要使用此函数,即使透明值设置为255,也就是不透明都可以,但是不能没有
$btn_ok = GUICtrlCreateButton("", 100, 47, 100, 26, $BS_BITMAP )
GUICtrlSetImage(-1, "Bitmap_181.bmp")
GUICtrlSetCursor(-1, 0)
$btn_ex = GUICtrlCreateButton("", 100, 80, 32, 32, $BS_ICON)
GUICtrlSetImage(-1, "Bitmap_181.ico")
GUICtrlSetCursor(-1, 0)
$btn_tt = GUICtrlCreatePic("Bitmap_181.bmp", 100, 120, 100, 26)
GUICtrlSetCursor(-1, 0)
$Pic1 = GUICtrlCreatePic("bg.jpg", 0, 0, 300, 200, $WS_CLIPSIBLINGS)
GUICtrlCreateLabel("", 0, 0, 300, 100, $WS_CLIPSIBLINGS, $GUI_WS_EX_PARENTDRAG)
$label=GUICtrlCreateLabel("当鼠标处于本行文字上方,将进行提示", 50, 15 )
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xff0000)
GUISetState(@SW_SHOW)
While 1
        If _Mouse_top($Gui,$label)=1 Then MsgBox(0,'提示','鼠标移动到了label控件上')
        If _Mouse_top($Gui,$ex)=1 Then
        $mouse = MouseGetPos()
        ToolTip ( "点击退出" , $mouse+10 , $mouse+15 )
        Else
        ToolTip ("")
        EndIf
        _dButton($Gui, $btn_ok, "Bitmap_181.bmp", "Bitmap_186.bmp", "Bitmap_187.bmp")
        _dButton($Gui, $btn_ex, "Bitmap_181.ico", "Bitmap_186.ico", "Bitmap_187.ico")
        _dButton($Gui, $btn_tt, "Bitmap_181.bmp", "Bitmap_186.bmp", "Bitmap_187.bmp")
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE,$ex
                        Exit
                Case $btn_ok
                        MsgBox(0,'提示','BMP图片按钮被点击')
                Case $btn_ex
                        MsgBox(0,'提示','ICO图标按钮被点击')
                Case $btn_tt
                        MsgBox(0,'提示','图片控件被点击')
        EndSwitch
wendUDF;
;===============================================================================
;
; 函数名称:    _dButton($Gui_id, $btn_ctrlid, $z_img, $j_img, $a_img)
; 描    述:    创建动态按钮
; 参    数:   $Gui_id                                        : 窗口句柄
;                                $btn_ctrlid                - (必须): 按钮句柄
;                                $z_img                       - (可选): 按钮正常时的图片
;                                $j_img                        - (可选): 鼠标经过按钮时的图片
;                                $a_img                        - (可选): 鼠标左键点击时的图片
; 要    求:   1、AutoIt3 V3.3.0.0 汉化版 测试OK
;                          2、必须要使用WinSetTrans函数,即使透明值设置为255,也就是不透明都可以,但是不能没有
; UDF 作者:   钟隐 (http://hi.baidu.com/rhc1987527)
; ACN ID:   298311657
;
;===============================================================================
;


Func _dButton($Gui_id, $btn_ctrlid, $z_img, $j_img, $a_img)
        If WinActive($Gui_id) Then
                $mouse = GUIGetCursorInfo($Gui_id)
                If $mouse = $btn_ctrlid Then
                        If $mouse = 1 Then
                                GUICtrlSetImage($btn_ctrlid, $a_img)
                        Else
                                GUICtrlSetImage($btn_ctrlid, $j_img)
                        EndIf
                Else
                        GUICtrlSetImage($btn_ctrlid, $z_img)
                EndIf
        EndIf
EndFunc   ;==>_dButton


;
;===============================================================================
;
; 函数名称:    _Mousetop($Gui_id,$ctrl_id)
; 描    述:    检测鼠标是否处于指定控件上方
; 参    数:   $Gui_id                                        : 窗口句柄
;                                $ctrl_id                                : 按钮句柄
; 要    求:   AutoIt3 V3.3.0.0 汉化版 测试OK
;
; 返 回 值:   1 表示鼠标位于指定窗口的控件上。
;                    0 表示鼠标没有在指定窗口的控件上。
;
; 示        例:                If _Mouse_top($Gui,$btn_ok)=1 Then MsgBox(0,'','')
;
; UDF 作者:   钟隐 (http://hi.baidu.com/rhc1987527)
; ACN        ID:   298311657
;
;===============================================================================
;
Func _Mouse_top($Gui_id, $ctrl_id)
        If WinActive($Gui_id) Then
                $mouse = GUIGetCursorInfo($Gui_id)
                If $mouse = $ctrl_id Then
                        Return 1
                Else
                        Return 0
                EndIf
        EndIf
EndFunc   ;==>_Mouse_top完整文件打包:(包含UDF、示例源码、示例图片)

afan 发表于 2009-12-23 23:46:32

回复 3# 298311657


    好像大家都没有注意点击图片控件时是响应的鼠标按下动作,与按钮的响应弹起有区别,有同此顾虑的不知道多不多,呵呵~ 有时间修改下~

zhenglei 发表于 2009-12-24 09:10:53

说得好。。。。

zhenglei 发表于 2010-3-10 14:32:50

这个不错。。一会研究下。。

左手猫头鹰 发表于 2010-10-13 22:28:44

感觉不错,论坛里面还是高手多呀

左手猫头鹰 发表于 2010-10-14 13:00:35

'鼠标移动到了label控件上'这个提示反应有点迟钝,要等1秒才会出来

zdpcc 发表于 2011-4-9 13:04:29

学习了,下来试试

淡定开源 发表于 2011-5-10 12:44:46

多谢三楼。。

netegg 发表于 2011-5-10 12:48:06

回复 1# Cisoce

第二个可以做个内嵌的gui试试

阿祥 发表于 2011-5-10 13:07:01

haijie1223 发表于 2011-5-10 13:33:07

学习了但是用图片做按钮会不会降低程序的效率呢

wsfda 发表于 2011-5-10 23:12:55

回复 12# 阿祥


    你这张图片太诡异了,一会有一回没有,我以为我的QQ出问题了呢,吓我一跳呢

wsfda 发表于 2011-5-10 23:13:12

学习了但是用图片做按钮会不会降低程序的效率呢
haijie1223 发表于 2011-5-10 13:33 http://www.autoitx.com/images/common/back.gif


    我也这么想,,,,
页: [1] 2
查看完整版本: 如何用图片做按钮?