woeiwoei 发表于 2010-5-4 18:56:59

如何在PNG图片GUI上再调用PNG图片做按钮?

本帖最后由 woeiwoei 于 2010-5-4 18:59 编辑

#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#include <File.au3>
#include <Array.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <Sound.au3>
#include <Date.au3>
Opt("MustDeclareVars", 0)
Global Const $AC_SRC_ALPHA = 1
_GDIPlus_Startup()
$Src = @scriptdir&"\beijing.png"
$hImage =_GDIPlus_ImageLoadFromFile($Src)
$width =_GDIPlus_ImageGetWidth ($hImage)
$height = _GDIPlus_ImageGetHeight($hImage)
$GUI = GUICreate("beijing", $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
SetBitMap($GUI, $hImage, 0)
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
GUISetState()
WinSetOnTop($gui,"",1)
for $i = 0 to 255 step 10
SetBitMap($GUI, $hImage, $i)
next

_WinAPI_DeleteObject($hImage)
_GDIPlus_Shutdown()
Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
if ($hWnd = $GUI) and ($iMsg = $WM_NCHITTEST) then Return $HTCAPTION
EndFunc

Func SetBitmap($hGUI, $hImage, $iOpacity)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend

    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
EndFunc
While 1
$msg = GUIGetMsg()
    Select
                Case $msg = $GUI_EVENT_CLOSE
             Exit
EndSelect
WEnd

这个只是调用了一个透明的PNG做了背景,请教大大们。
如何在这个背景上再调用一个PNG 做按钮?

这是背景和按钮。
大大们指点下啊。感激不尽~!!:face (36):

woeiwoei 发表于 2010-5-5 10:13:45

nnd,我给镶上去了~~:face (29):

水木子 发表于 2010-5-5 10:34:00

呵呵!上次调用皮肤有瑕疵,这次改用PNG啦?
楼主精神可嘉!值得学习。

superflq 发表于 2010-5-5 11:51:50

占个位置等待高手解答

woeiwoei 发表于 2010-5-5 15:37:53

回复 3# 水木子


    呵呵 功力太弱,上次没搞定,还需再练10年气功~~:face (36):

woeiwoei 发表于 2010-5-5 16:00:39

最新进展~~:face (22):


但是就是加不上软件的png图标啊~~郁闷至极~!
:face (30):

superflq 发表于 2010-5-5 16:31:17

继续加油,,

zhenglei 发表于 2010-5-5 16:43:56

支持一下。。 顶。。。等待高手出来

afan 发表于 2010-5-5 16:46:54

将png图片内置再调用~

woeiwoei 发表于 2010-5-5 17:00:10

本帖最后由 woeiwoei 于 2010-5-5 17:02 编辑

将png图片内置再调用~
afan 发表于 2010-5-5 16:46 http://www.autoitx.com/images/common/back.gif


    afan大侠。如何内置啊。刚搜索了下内置有个UDF 但是不会用。。
能再麻烦你一下吗?稍微给我说说~

afan 发表于 2010-5-5 17:24:52

刚才简单弄了下,可以在png背景上显示png按钮,不过点击按钮图片没响应,现在没时间研究这个~
有个计算器的源码,你搜索下,那个是完全符合你的png背景上显示png按钮的~

woeiwoei 发表于 2010-5-5 17:39:24

刚才简单弄了下,可以在png背景上显示png按钮,不过点击按钮图片没响应,现在没时间研究这个~
有个计算器的 ...
afan 发表于 2010-5-5 17:24 http://www.autoitx.com/images/common/back.gif


    谢谢超版抽时间看我的问题。。谢谢~!!:face (12):

woeiwoei 发表于 2010-5-9 20:41:34

在按钮图片上创建个热区。。点击就没什么问题了。。:face (29):

menfan 发表于 2010-5-10 15:18:53

效果不错,继续关注。。

woeiwoei 发表于 2010-5-11 15:26:43

PNG闪烁的问题基本上解决了。嘿嘿。:face (29):
页: [1]
查看完整版本: 如何在PNG图片GUI上再调用PNG图片做按钮?