找回密码
 加入
搜索
查看: 3743|回复: 2

[系统综合] 如何移动png透明图标窗体?

[复制链接]
发表于 2014-3-2 16:40:50 | 显示全部楼层 |阅读模式
问题不知道如何总结描述,所以只能大概下吧

如图




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

希望在此可以得到帮忙  不否就一个半成品随时间的流逝而遗忘了
#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[9][2]
$aGFX[1][0] = _LoadIconToBitmap(@ScriptDir & "\Skin\2_1.ico", $iIconSizeMax)
$aGFX[1][1] = _LoadIconToBitmap(@ScriptDir & "\Skin\2_2.ico", $iIconSizeMax)
_IconDock_IconAdd($hIconDock, 0, "_EventFunction", $IconDock_LBUTTONUP, "", 0, 0, -1)
_IconDock_IconSetBitmap($hIconDock, 1, $aGFX[1][0])

$aGFX[2][0] = _LoadIconToBitmap(@ScriptDir & "\Skin\1_1.ico", $iIconSizeMax)
$aGFX[2][1] = _LoadIconToBitmap(@ScriptDir & "\Skin\1_2.ico", $iIconSizeMax)
_IconDock_IconAdd($hIconDock, 0, "_EventFunction", $IconDock_LBUTTONUP, "", 0, 10, -1)
_IconDock_IconSetBitmap($hIconDock, 2, $aGFX[2][0])
_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][0])
        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][1])
        $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][0])
                _GDIPlus_BitmapDispose($aGFX[$i][1])
        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[0]) Or (Not $Ret[5]) Then
                Return SetError(1, 0, 0)
        EndIf
        Return $Ret[5]
EndFunc   ;==>_WinAPI_ShellExtractIcon
这是用3.3.6 弄的

问题:

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

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

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




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

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

本帖子中包含更多资源

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

×
发表于 2014-3-3 03:59:49 | 显示全部楼层
QQ 自动停靠 自动显隐 && VS2012 按钮三态 鼠标悬停

看我的帖子吧.你说的功能我帖子的代码几乎全可以实现
 楼主| 发表于 2014-3-3 10:43:17 | 显示全部楼层
回复 2# Ycxw2008


    看了下 列子有点差距 谢谢你的回答
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 01:59 , Processed in 0.084961 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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