如何在图片按钮上显示文字?(已解决)
本帖最后由 qq342252004 于 2011-2-12 10:00 编辑如何在图片按钮上显示文字?
已解决,用15楼的方法。 GUICtrlCreateLabel GUICtrlCreateLabel
水木子 发表于 2011-2-9 16:23 http://www.autoitx.com/images/common/back.gif
试过用GUICtrlCreateLabel了,被图片覆盖了看不到文字。 先创建图片(按钮),再创建文字。 $hPic = GUICtrlCreatePic("", 400, 145, 128, 128)
GUICtrlSetState(-1, $GUI_DISABLE)我是这样做的 本帖最后由 水木子 于 2011-2-9 16:57 编辑
GUICreate("Form1", 400, 300)
GUICtrlSetDefBkColor(-2)
GUICtrlCreatePic("button3.gif", 50, 50, 150, 50)
GUICtrlCreateLabel("这是按钮文本", 90, 70, 80, 17)
GUISetState()
Do
Until GUIGetMsg() = -3
我是这样做的
Hen5ei 发表于 2011-2-9 16:53 http://www.autoitx.com/images/common/back.gif
看来不是那么简单
水木子 发表于 2011-2-9 16:55 http://www.autoitx.com/images/common/back.gif
有时间的话可以用我提供的附件试试怎么样才可以显示文字又不会失去鼠标移到图片按钮上时显示另一张图片的功能吗? 我明白你的意思,你就是要做成两种状态的图片按钮嘛!
普通状态和鼠标悬停状态,没错,就是我那样。 回复 9# 水木子
PNG不是这么做的。 回复水木子
PNG不是这么做的。
republican 发表于 2011-2-9 19:21 http://www.autoitx.com/images/common/back.gif
你有办法解决这个问题吗? 水木子的代码很不错,简单明了,学习了! 回复 11# qq342252004
实在不好意思,看来是我思维定向了,没注意你是用的PNG。 回复 11# qq342252004
很抱歉,没有现成的例子。
要不你自己创建画板,实时渲染图片吧。 本帖最后由 xxoojoeooxx 于 2011-2-10 03:10 编辑
有点乱
将就用一下巴{:face (197):}
#Include <WinAPI.au3>
#Include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $ButtunCount=10 ;按钮数量
Global $P[$ButtunCount+1]
Local $Pi[$ButtunCount]
GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
_GDIPlus_StartUp ()
$hImage = _GDIPlus_ImageLoadFromFile ("001.png")
$hImage1 = _GDIPlus_ImageLoadFromFile ("002.png")
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 450, 450)
;GUICtrlCreatePicB(文本,文本左侧,文本顶部,接下来就是GUICtrlCreatePic原来的参数
$Pi = GUICtrlCreatePicB("1",5,5,"", 16, 24, 180, 36,$WS_CLIPSIBLINGS)
$Pi = GUICtrlCreatePicB("2",5,5,"", 243, 24, 180, 36,$WS_CLIPSIBLINGS)
$Pi = GUICtrlCreatePicB("3",5,5,"", 16, 82, 180, 36,$WS_CLIPSIBLINGS)
$Pi = GUICtrlCreatePicB("4",5,5,"", 243, 82, 180, 36,$WS_CLIPSIBLINGS)
$Pi = GUICtrlCreatePicB("5",5,5,"", 16, 140, 180, 36,$WS_CLIPSIBLINGS)
$Pi = GUICtrlCreatePicB("6",5,5,"", 243, 140, 180, 36,$WS_CLIPSIBLINGS)
$Pi = GUICtrlCreatePicB("7",5,5,"", 16, 198, 180, 36,$WS_CLIPSIBLINGS)
$Pi = GUICtrlCreatePicB("8",5,5,"", 243, 198, 180, 36,$WS_CLIPSIBLINGS)
$Pi = GUICtrlCreatePicB("9",5,5,"", 16, 256, 180, 36,$WS_CLIPSIBLINGS)
$Pi = GUICtrlCreatePicB("0",5,5,"", 243, 256, 180, 36,$WS_CLIPSIBLINGS)
$Pic = _GDIPlus_GraphicsCreateFromHWND ($Form1)
_WinAPI_InvalidateRect(WinGetHandle($Form1))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
$Pos = GUIGetCursorInfo($Form1)
For $i=1 To $P ;$P 为GUICtrlCreatePicB建立按钮的数量 $i为按钮编号
If $Pos = $Pi[$i-1]And $P[$i] = 0 Then
;If $Pos=1 Then
;Else
_GDIPLus_GraphicsDrawImageRect($Pic, $hImage1, $P[$i], $P[$i], $P[$i], $P[$i])
_GDIPlus_GraphicsDrawString($Pic,$P[$i],$P[$i]+$P[$i], $P[$i]+$P[$i])
$P[$i] = 1
;Endif
ElseIf $Pos <> $Pi[$i-1] And $P[$i]= 1 Then
_GDIPLus_GraphicsDrawImageRect($Pic, $hImage,$P[$i], $P[$i], $P[$i], $P[$i])
_GDIPlus_GraphicsDrawString($Pic,$P[$i],$P[$i]+$P[$i], $P[$i]+$P[$i])
$P[$i] = 0
EndIf
Next
WEnd
_GDIPlus_GraphicsDispose ($Pic)
_GDIPlus_ImageDispose ($hImage)
_GDIPlus_ImageDispose ($hImage1)
_GDIPlus_ShutDown ()
Func MY_WM_PAINT($hWnd, $msg, $wParam, $lParam)
_WinAPI_RedrawWindow($Form1, 0, 0, $RDW_UPDATENOW)
For $i=1 To $P
_GDIPLus_GraphicsDrawImageRect($Pic, $hImage, $P[$i], $P[$i], $P[$i], $P[$i])
_GDIPlus_GraphicsDrawString($Pic,$P[$i],$P[$i]+$P[$i], $P[$i]+$P[$i])
Next
_WinAPI_RedrawWindow($Form1, 0, 0, $RDW_VALIDATE)
Return $GUI_RUNDEFMSG
EndFunc ;==>MY_WM_PAINT
Func GUICtrlCreatePicB($txt,$tx,$ty,$pic,$x,$y,$w=-1,$h=-1,$sy=-1,$ex=-1)
$P+=1 ;按钮数量
$P[$P]=$x ;左侧
$P[$P]=$y ;顶部
$P[$P]=$w ;宽度
$P[$P]=$h ;高度
$P[$P]=0 ;Hover
$P[$P]=$txt ;文本
$P[$P]=$tx ;文本左侧
$P[$P]=$ty ;文本顶部
Return GUICtrlCreatePic($pic,$x,$y,$w,$h,$sy,$ex)
EndFunc