872777825 发表于 2014-3-2 16:40:50

如何移动png透明图标窗体?

问题不知道如何总结描述,所以只能大概下吧

如图




仿产品折腾个东西然后现在折腾出这个问题一直解决不了所以到此寻求各位长辈帮忙

希望在此可以得到帮忙不否就一个半成品随时间的流逝而遗忘了#RequireAdmin
#include "IconDock.au3"
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
Global Const $WS_POPUP = 0x80000000
Global Const $WS_EX_TOOLWINDOW = 0x00000080
Global Const $WS_CLIPSIBLINGS = 0x04000000
Global Const $WS_EX_MDICHILD = 0x00000040
Global Const $WM_NOTIFY = 0x0000004E
Dim $GUI
Global $iIconSizeMin = 48
Global $iIconSizeMax = 48

Global $hIconDock = _IconDock_Create(@DesktopWidth - 120, 0, $iIconSizeMax + $iIconSizeMin, @DesktopHeight+600, BitOR($IconDock_Align_Vertical, $IconDock_Center), $IconDock_Left, $iIconSizeMin, $iIconSizeMax, True)

_IconDock_SetOnActiveChange($hIconDock, "_ChangeIcon")
;_IconDock_SetAlpha($hIconDock, 1, 0.2);??
_IconDock_SetShadowOffset($hIconDock, -0.18, 0.22)
_IconDock_BeginUpdate($hIconDock)

Global $aGFX
$aGFX = _LoadIconToBitmap(@ScriptDir & "\Skin\2_1.ico", $iIconSizeMax)
$aGFX = _LoadIconToBitmap(@ScriptDir & "\Skin\2_2.ico", $iIconSizeMax)
_IconDock_IconAdd($hIconDock, 0, "_EventFunction", $IconDock_LBUTTONUP, "", 0, 0, -1)
_IconDock_IconSetBitmap($hIconDock, 1, $aGFX)

$aGFX = _LoadIconToBitmap(@ScriptDir & "\Skin\1_1.ico", $iIconSizeMax)
$aGFX = _LoadIconToBitmap(@ScriptDir & "\Skin\1_2.ico", $iIconSizeMax)
_IconDock_IconAdd($hIconDock, 0, "_EventFunction", $IconDock_LBUTTONUP, "", 0, 10, -1)
_IconDock_IconSetBitmap($hIconDock, 2, $aGFX)
_IconDock_EndUpdate($hIconDock)

GUISetState(@SW_SHOW)
$Form3 = GUICreate("123", 623, 442)
$Button2 = GUICtrlCreateButton("", 176, 176, 177, 57)
Global $bPause = False

While 1
        If GUIGetMsg() = -3 Then GUIDelete($GUI)
        ;Sleep(100)
WEnd

Func xGUI()

        $GUI = GUICreate("Form1", 299,320,@DesktopWidth - 370 , @DesktopHeight - 420)
   
        GUISetState(@SW_SHOW)

EndFunc

       

Func _LoadIconToBitmap($sFile, $iSize)
        Local $hIcon = _WinAPI_ShellExtractIcon($sFile, 0, $iSize, $iSize)
        Local $hBitmap = _IconDock_GetBitmapFromHIcon($hIcon, $iSize, $iSize)
        _WinAPI_DestroyIcon($hIcon)
        Return $hBitmap
EndFunc   ;==>_LoadIconToBitmap

Func _ChangeIcon($hID, $iIconIndex)
        Local Static $iOldIndex = $iIconIndex
        Local $iPlus = 0
        If $iOldIndex = 2 And $bPause = True Then $iPlus = 2
        _IconDock_IconSetBitmap($hID, $iOldIndex, $aGFX[$iOldIndex + $iPlus])
        If $iPlus = 0 Then
                ;If Not WinActive("Form1","") Then
                GUIDelete($GUI)
                ;EndIf
        EndIf
        $iPlus = 0
        If $iIconIndex = 2 And $bPause = True Then $iPlus = 2
        _IconDock_IconSetBitmap($hID, $iIconIndex, $aGFX[$iIconIndex + $iPlus])
        $iOldIndex = $iIconIndex
        If $iIconIndex = 1 Then
                If Not WinExists("Form1") Then xGUI()
        EndIf
EndFunc   ;==>_ChangeIcon

Func _EventFunction($hID, $iIconIndex, $iEventMsg)
        Switch $hID
                Case $hIconDock
                        Switch $iIconIndex
                                Case 1
                                        GUIDelete($GUI)
                                        ShellExecute("http://www.baidu.com")
                                Case 2
                        EndSwitch
        EndSwitch
EndFunc   ;==>_EventFunction

Func _Exit()
        _IconDock_Destroy($hIconDock)
        For $i = 1 To 8
                _GDIPlus_BitmapDispose($aGFX[$i])
                _GDIPlus_BitmapDispose($aGFX[$i])
        Next
        Exit
EndFunc   ;==>_Exit

Func _WinAPI_ShellExtractIcon($sIcon, $iIndex, $iWidth, $iHeight)
        Local $Ret = DllCall('shell32.dll', 'int', 'SHExtractIconsW', 'wstr', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr*', 0, 'int', 1, 'int', 0)
        If (@error) Or (Not $Ret) Or (Not $Ret) Then
                Return SetError(1, 0, 0)
        EndIf
        Return $Ret
EndFunc   ;==>_WinAPI_ShellExtractIcon

这是用3.3.6 弄的

问题:

1.当鼠标移动到IE的图标时弹出了 窗口 $GUI
   那么当鼠标离开IE图标且不在窗口$GUI上时,自动删除隐藏窗口$GUI,
   反当鼠标离开IE图标但在窗口$GUI上时,那么就等待$gui上的操作
----现在我怎么弄都是鼠标一离开IE图标就马上自动删除窗口GUI...求救!

2.如何才能时候鼠标单击拖动下面那个图标的时候可以把这两个图标的位置随意移动

3.当拖动到屏幕最右边的时候是否可以自动隐藏进去,就剩下显示一点点,当鼠标划过去的时候又可以自动弹出?



这个东西琢磨了好长时间了,一有时间就拿出来玩玩 但仍然无法解决
今天试着拿上来给各位前辈看看能否解决这个问题
谢谢

用的是3.3.6版本弄的,用搞版本好像有问题
附件

Ycxw2008 发表于 2014-3-3 03:59:49

QQ 自动停靠 自动显隐 && VS2012 按钮三态 鼠标悬停

看我的帖子吧.你说的功能我帖子的代码几乎全可以实现

872777825 发表于 2014-3-3 10:43:17

回复 2# Ycxw2008


    看了下 列子有点差距 谢谢你的回答{:face (382):}
页: [1]
查看完整版本: 如何移动png透明图标窗体?