GDI+ 图形库 创建一个带有悬浮图标的可交互 GUI,它允许用户通过拖拽文件到悬浮图标上来触发不同的操作,并展示动态的按钮交互。

 

所需依赖库下载:

Gdip.ahk库

 

文件管理器中拖放文件的拖放Gui.ahk

; 测试方法:拖拽文件到悬浮图标上。具体详见以下链接的需求说明
; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=72575
;*************************************************************
#Include <Gdip>  ;<------       Replace with your copy of GDIP
;*************************************************************
#SingleInstance,Force
SetBatchLines,-1
gdip_Startup()
lst := ["a","b","c","d"]
pos := [50,80,110,140]
Gui,1:+AlwaysOnTop +LastFound hwndGuiHwnd -DPIScale -Caption
Gui,1:Color,123456
WinSet,TransColor,123456
Gui,1:Margin,0,0
Gui,1:Add,Pic,x0 y0 w50 h50 0xE hwndMain gMoveChange
SetImage(Main,HB_BITMAP_MAKER("C"))
GuiControl,1:Move,% Main,w50 h50
Loop, 4	{
  Gui,1:Add,Pic,x0 y+0 w30 h30 0xE hwndButt%A_Index%
  SetImage(Butt%A_Index%,HB_BITMAP_MAKER(A_Index))
  GuiControl,1:Move,% Butt%A_Index%,w30 h30
  GuiControl,1:Hide,% Butt%A_Index%
  
  Gui,1:Add,Pic,x+0 yp w30 h30 0xE hwndTButt%A_Index%
  SetImage(TButt%A_Index%,HB_BITMAP_MAKER(lst[A_Index]))
  GuiControl,1:Move,% TButt%A_Index%,w30 h30
  GuiControl,1:Hide,% TButt%A_Index%
}

Handles := []
loop 4	
  Handles.Push(butt%A_Index%)
loop 4	
  Handles.Push(Tbutt%A_Index%)

Gui,1:Show,w100 h400, blah blah
SetTimer,Phase1,500
return
GuiClose:
GuiContextMenu:
*ESC::
  ExitApp
  
MoveChange:
  if(GetKeyState("Shift")){
    MsgBox, This would be where you edit w/e you want
    return
  }
  PostMessage,0xA1,2
  return
  
Phase1:
  MouseGetPos,,,,ctrl,2
  if(GetKeyState("LButton")&&A_Cursor="Unknown"&&ctrl=Main){
    loop 4	
      GuiControl,1:Show,% Handles[A_Index]
    Lctrl := ""
    SetTimer,Phase1,Off
    SetTimer,Phase2,30
  }
  return

Phase2:
  MouseGetPos,,,,ctrl,2
  loop 4	{
    if(ctrl=Butt%A_Index%&&ctrl!=Lctrl){
      Lctrl := ctrl
      npos := pos[A_Index]
      SI := A_Index
      Loop, 4 {
        GuiControl,1:Show,% Handles[A_Index+4]
        GuiControl,1:Move,% Handles[A_Index+4], % " y" npos
        npos+=30
      }
      GuiControl,1:+Redraw,% Handles[8]
    }
  }
  if(!GetKeyState("LButton")){
    loop 8	
      GuiControl,1:Hide,% Handles[A_Index]
    SetTimer,Phase1,On
    SetTimer,Phase2,Off
  }
  return


GuiDropFiles:
  MouseGetPos,,,,ctrl,2
  Loop, 4
    if(ctrl=Handles[A_Index+4]){
      ToolTip,% "File / Folder :`n" A_GuiEvent "`n`nButton: " SI " - " lst[A_Index]
      SetTimer,TTOff,-5000
      return
    }
  ToolTip, Not a valid button
  SetTimer,TTOff,-5000
  return

TTOff:
  ToolTip,
  return

HB_BITMAP_MAKER(char){
  ;Bitmap Created Using: HB Bitmap Maker
  pBitmap:=Gdip_CreateBitmap( 100 , 100 ) 
  G := Gdip_GraphicsFromImage( pBitmap )
  Gdip_SetSmoothingMode( G , 2 )
  Brush := Gdip_BrushCreateSolid( "0xFF004D8D" )
  Gdip_FillRectangle( G , Brush , 2 , 2 , 96 , 96 )
  Gdip_DeleteBrush( Brush )
  Brush := Gdip_CreateLineBrushFromRect( 0 , 0 , 100 , 100 , "0xFFD4FAFC" , "0xFF004D8D" , 1 , 1 )
  Gdip_FillRectangle( G , Brush , 4 , 4 , 92 , 92 )
  Gdip_DeleteBrush( Brush )
  Brush := Gdip_CreateLineBrushFromRect( 0 , 0 , 100 , 100 , "0xFFD4FAFC" , "0xFF004D8D" , 1 , 1 )
  Gdip_FillRectangle( G , Brush , 5 , 5 , 90 , 90 )
  Gdip_DeleteBrush( Brush )
  Brush := Gdip_CreateLineBrushFromRect( 4 , 2 , 90 , 47 , "0xFFC6F2F8" , "0xFF8ACFE7" , 1 , 1 )
  Gdip_FillRectangle( G , Brush , 6 , 6 , 88 , 88 )
  Gdip_DeleteBrush( Brush )
  Brush := Gdip_CreateLineBrushFromRect( 7 , 47 , 88 , 46 , "0xFF198EC7" , "0xaa6FC0E0" , 1 , 1 )
  Gdip_FillRectangle( G , Brush , 6 , 50 , 88 , 45 )
  Gdip_DeleteBrush( Brush )
  Brush := Gdip_BrushCreateSolid( "0xFFF0F0F0" )
  Gdip_TextToGraphics( G , char , "s56 Center vCenter Bold c" Brush " x0 y0" , "Arial" , 100 , 100 )
  Gdip_DeleteBrush( Brush )
  Gdip_DeleteGraphics( G )
  hBitmap:=Gdip_CreateHBITMAPFromBitmap(pBitmap)
  Gdip_DisposeImage(pBitmap)
  return hBitmap
}	

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。