找回密码  加入

AUTOIT CN

搜索
查看: 171880|回复: 655

[皮肤] 360界面放送,20111115更新

[复制链接]
发表于 2011-11-14 12:26:26 | 显示全部楼层 |阅读模式
本帖最后由 seniors 于 2013-3-7 14:03 编辑

先贴图,看看发在GUI交流版效果怎么样,好像这里的附件是不花钱的




老规矩,代码回复可见,这次用到了大量图片,故上传压缩档。
这次代码使用3.3.6.1版,如果你使用的版本出现578行错误,原来是不出现错误的,是不出现图片,注意,不出现图片请按下面方法改一下
_WinAPI_UpdateLayeredWindowEx($zhu_gui, $hBitMap, 255, 1)
改为_WinAPI_UpdateLayeredWindowEx($zhu_gui,-1,-1, $hBitMap, 255, 1)

出现_WinAPI_UpdateLayeredWindowEx未知函数错误的,请在开头加上
#Include <WinAPIEx.au3>

11.15更新,增加的较详细的注释,解决了tip不消失的现象
现在还存在移动鼠标GDI对象增加的问题,希望大家能一起研究,附件更新
3.3.7.15版不出现GDI对象增加的问题
2012.03.02:阴影部分修改
游客,如果您要查看本帖隐藏内容请回复

  1. #include <Constants.au3>
  2. #include <GUIConstantsEx.au3>
  3. #include <WindowsConstants.au3>
  4. #include <ButtonConstants.au3>
  5. #Include <WinAPIEx.au3>
  6. #include <GDIPlusEx.au3>
  7. #include <Thread.au3>
  8. Opt('GUIOnEventMode', 1)
  9. _RTEmptyWorkingSet();减少内存占用
  10. ;窗口宽度,高度,圆角
  11. Global $zhuwidth = 600, $zhuheight = 400, $winround = 10
  12. ;配色颜色数组,当前皮肤序号
  13. Global $pifucolor[5] = [0xFF0860a8, 0xFFFFAA00, 0xFF00AAFF, 0xFF990000, 0xFF009a20], $pifu = 0
  14. ;皮肤图片文件数组,第一个为“”空,是一个标志,为空则按本色显示,当前皮肤序号
  15. Global $imgpifu[6] = ["", @ScriptDir & "\top\1.jpg", @ScriptDir & "\top\2.jpg", @ScriptDir & "\top\3.jpg", @ScriptDir & "\top\4.jpg", @ScriptDir & "\top\5.jpg"], $imgNum = 1
  16. ;大图标区域数组,当前选中序号,当前hover序号,当前hover标识,当hover标识和hover序号相同时不重绘
  17. Global $PanBtnRect[6], $SelectPanBtn = 1, $OnPanBtnNum = 0, $OnPanBtnFlag = 0
  18. ;系统按钮区域数组,系统按钮hover图片文件数组,系统按钮Down图片文件数组,系统按钮tip数组,hoevr按钮标识,hover按钮序号,标识序号相同不重绘,Down按钮序号
  19. Global $topbutton[7], $topbuttonhoverimg[7], $topbuttondownimg[7], $topbuttontip[7], $onTopbuttonFlag = 0, $onTopbuttonNum = 0, $DownTopbuttonNum = 0

  20. ;外形窗口建立
  21. Global $zhu_gui = GUICreate("360界面预览", $zhuwidth, $zhuheight, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
  22. _GDIPlus_Startup()
  23. _initRect();按钮区域等初始设置
  24. ;注册窗口消息函数
  25. GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
  26. GUIRegisterMsg($WM_LBUTTONDOWN, 'WM_LBUTTONDOWN')
  27. GUIRegisterMsg($WM_LBUTTONUP, 'WM_LBUTTONUP')
  28. ;中间的内容窗口建立
  29. $ne_gui = GUICreate("", $zhuwidth - 10, 260, 8, 110, $WS_POPUP, $WS_EX_MDICHILD, $zhu_gui)
  30. $mylabel = GUICtrlCreateLabel("第一页", 10, 10, $zhuwidth - 20, 30)
  31. GUICtrlSetFont(-1, 24)
  32. GUICtrlSetColor(-1, 0x0860a8)
  33. ;显示窗口
  34. _DrawBk( _hoverBTN($SelectPanBtn, $OnPanBtnNum))
  35. GUISetState(@SW_SHOW, $ne_gui)
  36. GUISetState(@SW_SHOW, $zhu_gui)


  37. While 1
  38.         $MOusePoint = _WinAPI_GetMousePos()
  39.         $winrect = _WinAPI_GetWindowRect($zhu_gui)
  40.         If Not _WinAPI_PtInRect($winrect, $MOusePoint) Then ToolTip("");如果鼠标在窗口外则取消tip
  41.         Sleep(10)
  42. WEnd

  43. Func exitfunc()
  44.         _GDIPlus_Shutdown()
  45.         Exit
  46. EndFunc   ;==>exitfunc

  47. Func _initRect();初始化系统按钮图标位置,中间大按钮位置等
  48.         For $iI = 1 To 6;初始化6个大按钮位置
  49.                 $PanBtnRect[$iI - 1] = DllStructCreate($tagRECT)
  50.                 DllStructSetData($PanBtnRect[$iI - 1], 1, 10 + ($iI - 1) * 70)
  51.                 DllStructSetData($PanBtnRect[$iI - 1], 2, 30)
  52.                 DllStructSetData($PanBtnRect[$iI - 1], 3, $iI * 70)
  53.                 DllStructSetData($PanBtnRect[$iI - 1], 4, 90)
  54.         Next
  55.         ;初始化右上角系统按钮位置,及系统按钮hover,Down图像及提示信息
  56.         Local $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnClose.png")
  57.         $mybtnx = $zhuwidth - 2 - _GDIPlus_ImageGetWidth($kzImage)
  58.         $topbutton[0] = DllStructCreate($tagRECT)
  59.         DllStructSetData($topbutton[0], 1, $mybtnx)
  60.         DllStructSetData($topbutton[0], 2, 1)
  61.         DllStructSetData($topbutton[0], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  62.         DllStructSetData($topbutton[0], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  63.         $topbuttonhoverimg[0] = @ScriptDir & "\top\TopPanelCloseOver.png"
  64.         $topbuttondownimg[0] = @ScriptDir & "\top\TopPanelCloseDown.png"
  65.         $topbuttontip[0] = "关闭"
  66.        
  67.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnMax.png")
  68.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  69.         $topbutton[1] = DllStructCreate($tagRECT)
  70.         DllStructSetData($topbutton[1], 1, $mybtnx + 1)
  71.         DllStructSetData($topbutton[1], 2, 1)
  72.         DllStructSetData($topbutton[1], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  73.         DllStructSetData($topbutton[1], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  74.         $topbuttonhoverimg[1] = @ScriptDir & "\top\MiddleOver.png"
  75.         $topbuttondownimg[1] = @ScriptDir & "\top\MiddleDown.png"
  76.         $topbuttontip[1] = "最大化"
  77.        
  78.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnMin.png")
  79.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  80.         $topbutton[2] = DllStructCreate($tagRECT)
  81.         DllStructSetData($topbutton[2], 1, $mybtnx + 1)
  82.         DllStructSetData($topbutton[2], 2, 1)
  83.         DllStructSetData($topbutton[2], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  84.         DllStructSetData($topbutton[2], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  85.         $topbuttonhoverimg[2] = @ScriptDir & "\top\MiddleOver.png"
  86.         $topbuttondownimg[2] = @ScriptDir & "\top\MiddleDown.png"
  87.         $topbuttontip[2] = "最小化"
  88.        
  89.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnSetting.png")
  90.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  91.         $topbutton[3] = DllStructCreate($tagRECT)
  92.         DllStructSetData($topbutton[3], 1, $mybtnx + 1)
  93.         DllStructSetData($topbutton[3], 2, 1)
  94.         DllStructSetData($topbutton[3], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  95.         DllStructSetData($topbutton[3], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  96.         $topbuttonhoverimg[3] = @ScriptDir & "\top\MiddleOver.png"
  97.         $topbuttondownimg[3] = @ScriptDir & "\top\MiddleDown.png"
  98.         $topbuttontip[3] = "设置"
  99.        
  100.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnFeedback.png")
  101.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  102.         $topbutton[4] = DllStructCreate($tagRECT)
  103.         DllStructSetData($topbutton[4], 1, $mybtnx)
  104.         DllStructSetData($topbutton[4], 2, 1)
  105.         DllStructSetData($topbutton[4], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  106.         DllStructSetData($topbutton[4], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  107.         $topbuttonhoverimg[4] = @ScriptDir & "\top\over.png"
  108.         $topbuttondownimg[4] = @ScriptDir & "\top\mask.png"
  109.         $topbuttontip[4] = "反馈"
  110.        
  111.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\skin.png")
  112.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  113.         $topbutton[5] = DllStructCreate($tagRECT)
  114.         DllStructSetData($topbutton[5], 1, $mybtnx)
  115.         DllStructSetData($topbutton[5], 2, 1)
  116.         DllStructSetData($topbutton[5], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  117.         DllStructSetData($topbutton[5], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  118.         $topbuttonhoverimg[5] = @ScriptDir & "\top\over.png"
  119.         $topbuttondownimg[5] = @ScriptDir & "\top\mask.png"
  120.         $topbuttontip[5] = "皮肤"
  121.        
  122.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnSkin.png")
  123.         $mybtnx = $zhuwidth - 20 - _GDIPlus_ImageGetWidth($kzImage)
  124.         $topbutton[6] = DllStructCreate($tagRECT)
  125.         DllStructSetData($topbutton[6], 1, $mybtnx)
  126.         DllStructSetData($topbutton[6], 2, 30)
  127.         DllStructSetData($topbutton[6], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  128.         DllStructSetData($topbutton[6], 4, _GDIPlus_ImageGetHeight($kzImage) + 30)
  129.         $topbuttonhoverimg[6] = @ScriptDir & "\top\over.png"
  130.         $topbuttondownimg[6] = @ScriptDir & "\top\mask.png"
  131.         $topbuttontip[6] = "配色"
  132.        
  133.         _WinAPI_DeleteObject($kzImage)
  134. EndFunc   ;==>_initRect

  135. #cs
  136.         窗口背景图像绘制
  137.         $mywidth,$myheight是窗口宽度和高度
  138.         $mycolor是窗口背景颜色
  139.         $myskin是窗口背景图片,如果无背景图片则是纯背景色,有图片则背景用图片、此时背景颜色不起作用
  140.         $myround是窗口圆角大小
  141.         后面四个参数是指是否圆角
  142. #ce
  143. Func _myback($mywidth, $myheight, $mycolor = 0xFF0860a8, $myskin = "", $myround = 10, $myleftup = True, $myrightup = True, $myleftdown = True, $myrightdown = True)
  144.         Local $hHBITMAP = _WinAPI_CreateBitmap($mywidth, $myheight, 1, 32);建立背景位图
  145.         Local $hCDC = _WinAPI_CreateCompatibleDC(0);建立绘图DC
  146.         Local $hOld = _WinAPI_SelectObject($hCDC, $hHBITMAP);调入图片到DC
  147.         Local $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hCDC);从DC创建图形对象
  148.         _GDIPlus_GraphicsClear($hGraphic, 0x00000000);清空图形
  149.         _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2);绘制质量 2 - 使用 8 X 8 矩形过滤器
  150.         _GDIPlus_GraphicsSetInterpolationMode($hGraphic, 7);插值法 7=High-quality, bicubic interpolation.
  151.         $hPath = _myPath(0, 0, $mywidth, $myheight);建立窗口四周圆角的路径
  152.         $hPen = _GDIPlus_PenCreate(0xFF000000, 1, 0);创建描边黑色画笔,线宽为1
  153.         _GDIPlus_PenSetLineJoin($hPen, 2);2 指画笔转变处用圆角光滑处理
  154.         DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGraphic, "hwnd", $hPen, "hwnd", $hPath);依据路径用画笔描边
  155.         If $myskin = "" Then;如果没有背景图片,则画背景颜色
  156.                 Local $tRect = _GDIPlus_RectFCreate(0, 0, 40, $myheight);设置区域色块
  157.                 Local $hBrush = _GDIPlus_LineBrushCreateFromRect($tRect, 0xaaffffff, $mycolor, 1, 3);设置渐变画刷
  158.                 Local $tBlends[5][2];颜色分配方案
  159.                 $tBlends[0][0] = 4;有4个关键位置
  160.                 $tBlends[1][0] = 0.05;第一个位置的颜色按渐变色中的0.05比例
  161.                 $tBlends[1][1] = 0.0;第一位置在填充区域的0位置,即起始位置
  162.                 $tBlends[2][0] = 1;第二个位置的颜色按渐变色的1比例,即100%也就是上面设置画刷中的$mycolor色
  163.                 $tBlends[2][1] = 0.05;第二个位置在填充区域0.05比例处
  164.                 $tBlends[3][0] = 0.9
  165.                 $tBlends[3][1] = 0.9
  166.                 $tBlends[4][0] = 1
  167.                 $tBlends[4][1] = 1.0
  168.                 _GDIPlus_LineBrushSetBlend($hBrush, $tBlends);使画刷按颜色分配方案设置
  169.                 DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $hBrush, "hwnd", $hPath);用画刷填充路径
  170.                 _GDIPlus_BrushDispose($hBrush);销毁画刷
  171.         Else;若有图片,则画背景图片
  172.                 Local $kzImage = _GDIPlus_ImageLoadFromFile($myskin);载入图片文件
  173.                 Local $imgwidth = $mywidth;临时变量$imgwidth设为窗口宽度
  174.                 If _GDIPlus_ImageGetWidth($kzImage) < $mywidth Then $imgwidth = _GDIPlus_ImageGetWidth($kzImage);如图片宽度小于窗口宽度,则高为图片的宽度
  175.                 Local $imgheight = $myheight
  176.                 If _GDIPlus_ImageGetHeight($kzImage) < $myheight Then $imgheight = _GDIPlus_ImageGetHeight($kzImage)
  177.                 $mypictexture = _GDIPlus_TextureCreate2($kzImage, 0, 0, $imgwidth, $imgheight, 3);建立以图片为填充内容画刷,3为如果填充区域大于图片则上下左右要翻转
  178.                 DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $mypictexture, "hwnd", $hPath);以画刷填充路径
  179.                 _GDIPlus_BrushDispose($mypictexture);销毁画刷
  180.                 _WinAPI_DeleteObject($kzImage)
  181.                
  182.         EndIf
  183.         ;路径渐变画刷
  184. ;~         Local $aPoints[4][2]
  185. ;~         $aPoints[0][0]=3
  186. ;~         _GDIPlus_PathBrushCreate($aPoints, $iWrapMode = 0)
  187. ;~         _GDIPlus_PathBrushGetBlend($hPathGradientBrush)
  188.        
  189.         _GDIPlus_PathDispose($hPath);销毁路径
  190.         _GDIPlus_PenDispose($hPen);销毁画笔
  191.         ;以下是画出左上角的系统按钮底图
  192.         Local $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnClose.png")
  193.         $mybtnx = $mywidth - 2 - _GDIPlus_ImageGetWidth($kzImage)
  194.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx, 1, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  195.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnMax.png")
  196.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  197.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx, 1, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  198.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnMin.png")
  199.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  200.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx, 1, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  201.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnSetting.png")
  202.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  203.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx, 1, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  204.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnFeedback.png")
  205.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  206.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx, 1, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  207.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\skin.png")
  208.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  209.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx + 1, 2, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  210.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnSkin.png")
  211.         $mybtnx = $mywidth - 20 - _GDIPlus_ImageGetWidth($kzImage)
  212.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx, 30, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  213.         _WinAPI_DeleteObject($kzImage)
  214.         ;系统按钮绘制结束
  215.        
  216.         $hFamily = _GDIPlus_FontFamilyCreate("黑体")
  217.         $hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
  218.         $tLayout = _GDIPlus_RectFCreate(5, 5)
  219.         $hPath = _GDIPlus_PathCreate()
  220.         _GDIPlus_PathAddString($hPath, "250流氓软件", $tLayout, $hFamily, 1, 16, 0);读取字体外形为路径;0是正常字,16是字号
  221.         DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $hBrush, "hwnd", $hPath)
  222.         _GDIPlus_PathDispose($hPath)
  223.         $hPath = _GDIPlus_PathCreate()
  224.         $tLayout = _GDIPlus_RectFCreate(5, $myheight - 25)
  225.         _GDIPlus_PathAddString($hPath, "沙子制作 By seniors 2011", $tLayout, $hFamily, 0, 12, 0);读取字体外形为路径;0是正常字,12是字号
  226.         DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $hBrush, "hwnd", $hPath)
  227.         _GDIPlus_PathDispose($hPath)
  228.         _GDIPlus_FontFamilyDispose($hFamily)
  229.         _GDIPlus_BrushDispose($hBrush)
  230.         _GDIPlus_GraphicsDispose($hGraphic)
  231.         _WinAPI_SelectObject($hCDC, $hOld)
  232.         _WinAPI_DeleteDC($hCDC)
  233.         Return $hHBITMAP
  234. EndFunc   ;==>_myback

  235. Func _hoverBTN($i, $j);绘制中间大图标,$i为当前选中的图标序号,$j为当前处于hover状态的图标序号、当等于0时为无hover图标
  236.         ;建立底图位图
  237.         Local $hHBITMAP = _myback($zhuwidth, $zhuheight, $pifucolor[$pifu], $imgpifu[$imgNum], $winround, True, True, True, True)
  238.         Local $hCDC = _WinAPI_CreateCompatibleDC(0);建立DC
  239.         Local $hOld = _WinAPI_SelectObject($hCDC, $hHBITMAP);把底图调入DC
  240.         Local $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hCDC);根据DC建立图形对象
  241.         $hPath = _myPath(8 + 70 * ($i - 1), 25, 66, 80, 5,True);根据$i建立当前选中图标的高亮区域阴影路径,
  242.         ;和前面注释相同部分不注释了,下面是高亮阴影绘制,
  243.         $hPen = _GDIPlus_PenCreate(0x33000000, 1, 0)
  244.         _GDIPlus_PenSetLineJoin($hPen, 2);2 - Line join produces a smooth, circular arc between the lines.
  245.         DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGraphic, "hwnd", $hPen, "hwnd", $hPath)
  246.         _GDIPlus_PenDispose($hPen)
  247.         _GDIPlus_PathDispose($hPath)
  248.         ;以下是高亮区域描边
  249.         $hPath = _myPath(7 + 70 * ($i - 1), 24, 66, 80, 5)
  250.         $hPen = _GDIPlus_PenCreate(0x77FFFFFF, 1, 0)
  251.         _GDIPlus_PenSetLineJoin($hPen, 2);2 - Line join produces a smooth, circular arc between the lines.
  252.         DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGraphic, "hwnd", $hPen, "hwnd", $hPath)
  253.         _GDIPlus_PenDispose($hPen)
  254.         ;填充高亮区域
  255.         $tRect = _GDIPlus_RectFCreate(0, 0, 70, 110);设置区域色块
  256.         $hBrush = _GDIPlus_LineBrushCreateFromRect($tRect, 0x99FFFFFF, 0x33FFFFFF, 1, 3)
  257.         Local $tBlends2[5][2]
  258.         $tBlends2[0][0] = 4
  259.         $tBlends2[1][0] = 0.01
  260.         $tBlends2[1][1] = 0.0
  261.         $tBlends2[2][0] = 0.1
  262.         $tBlends2[2][1] = 0.5
  263.         $tBlends2[3][0] = 1
  264.         $tBlends2[3][1] = 0.5
  265.         $tBlends2[4][0] = 1
  266.         $tBlends2[4][1] = 1.0
  267.         _GDIPlus_LineBrushSetBlend($hBrush, $tBlends2)
  268.         DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $hBrush, "hwnd", $hPath)
  269.         _GDIPlus_BrushDispose($hBrush)
  270.         _GDIPlus_PathDispose($hPath)
  271.        
  272.         If $j <> 0 Then;如有hover图标,则绘制hover高亮区域
  273.                 $hPath = _myPath(8 + 70 * ($j - 1), 25, 66, 80, 5,True );阴影路径
  274.                 $hPen = _GDIPlus_PenCreate(0x22000000, 1, 0)
  275.                 _GDIPlus_PenSetLineJoin($hPen, 2);2 - Line join produces a smooth, circular arc between the lines.
  276.                 DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGraphic, "hwnd", $hPen, "hwnd", $hPath)
  277.                 _GDIPlus_PenDispose($hPen)
  278.                 _GDIPlus_PathDispose($hPath)
  279.                 $hPath = _myPath(7 + 70 * ($j - 1), 24, 66, 80, 5);高亮路径
  280.                 $hPen = _GDIPlus_PenCreate(0x33FFFFFF, 1, 0)
  281.                 _GDIPlus_PenSetLineJoin($hPen, 2);2 - Line join produces a smooth, circular arc between the lines.
  282.                 DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGraphic, "hwnd", $hPen, "hwnd", $hPath)
  283.                 _GDIPlus_PenDispose($hPen)
  284.                 $tRect = _GDIPlus_RectFCreate(0, 0, 70, 110);设置区域色块
  285.                 $hBrush = _GDIPlus_LineBrushCreateFromRect($tRect, 0x55FFFFFF, 0x11FFFFFF, 1, 3)
  286.                 Local $tBlends2[5][2]
  287.                 $tBlends2[0][0] = 4
  288.                 $tBlends2[1][0] = 0.01
  289.                 $tBlends2[1][1] = 0.0
  290.                 $tBlends2[2][0] = 0.1
  291.                 $tBlends2[2][1] = 0.5
  292.                 $tBlends2[3][0] = 1
  293.                 $tBlends2[3][1] = 0.5
  294.                 $tBlends2[4][0] = 1
  295.                 $tBlends2[4][1] = 1.0
  296.                 _GDIPlus_LineBrushSetBlend($hBrush, $tBlends2)
  297.                 DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $hBrush, "hwnd", $hPath)
  298.                 _GDIPlus_BrushDispose($hBrush)
  299.                 _GDIPlus_PathDispose($hPath)
  300.         EndIf
  301.        
  302.         ;绘制中间大图标,因为大图标位于高亮上方,所以没有在背景底纹中绘制
  303.         For $iI = 1 To 6
  304.                 $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\app\" & $iI & ".png")
  305.                 _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), DllStructGetData($PanBtnRect[$iI - 1], 1), DllStructGetData($PanBtnRect[$iI - 1], 2), 60, 60)
  306.                 _WinAPI_DeleteObject($kzImage)
  307.         Next
  308.         ;销毁操作
  309.        
  310.         _GDIPlus_GraphicsDispose($hGraphic)
  311.         _WinAPI_SelectObject($hCDC, $hOld)
  312.         _WinAPI_DeleteDC($hCDC)

  313.         Return $hHBITMAP
  314. EndFunc   ;==>_hoverBTN

  315. Func _huanfu();换配色,不想用弹出窗口选择颜色了,简单点,按一次本色本色按钮颜色选择+1
  316.         $pifu += 1;颜色变量序号加1
  317.         $imgNum = 0;背景图象序号设为0,0序号里是无文件
  318.         If $pifu == UBound($pifucolor) Then $pifu = 0;如果颜色序号走出预设颜色数,归0
  319.         ;显示更换颜色后的窗口
  320.         _DrawBk( _hoverBTN($SelectPanBtn, $OnPanBtnNum))
  321. EndFunc   ;==>_huanfu

  322. Func _huanimg();换背景图片
  323.         $imgNum += 1
  324.         If $imgNum == UBound($imgpifu) Then $imgNum = 1;如背景图片序号超出预设背景数,归1,因为0 为无背景图片
  325.         _DrawBk( _hoverBTN($SelectPanBtn, $OnPanBtnNum))
  326. EndFunc   ;==>_huanimg

  327. Func _topbutton($btRect, $file);绘制系统按钮hover或者Down的图象,$btRect为区域,$file为要画的图象文件
  328.         Local $hHBITMAP = _hoverBTN($SelectPanBtn, $OnPanBtnNum)
  329.         Local $hCDC = _WinAPI_CreateCompatibleDC(0)
  330.         Local $hOld = _WinAPI_SelectObject($hCDC, $hHBITMAP)
  331.         Local $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hCDC)
  332.         Local $kzImage = _GDIPlus_ImageLoadFromFile($file)
  333.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), DllStructGetData($btRect, 1), DllStructGetData($btRect, 2), _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  334.         _WinAPI_DeleteObject($kzImage)
  335.         _GDIPlus_GraphicsDispose($hGraphic)
  336.         _WinAPI_SelectObject($hCDC, $hOld)
  337.         _WinAPI_DeleteDC($hCDC)
  338.         Return $hHBITMAP
  339. EndFunc   ;==>_topbutton

  340. Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam);鼠标在窗口范围的检测
  341.         Local $tPoint = _WinAPI_GetMousePos(True, $hWnd)
  342.         Local $wrect = _WinAPI_GetWindowRect($zhu_gui)
  343.         Switch $hWnd
  344.                 Case $zhu_gui
  345.                         ;hover标识归0
  346.                         $OnPanBtnFlag = 0
  347.                         $onTopbuttonFlag = 0
  348.                         ;检测鼠标是否在大图标区域,在则置hover标识
  349.                         For $iI = 1 To 6
  350.                                 If _WinAPI_PtInRect($PanBtnRect[$iI - 1], $tPoint) Then
  351.                                         $OnPanBtnFlag = $iI
  352.                                         ExitLoop
  353.                                 EndIf
  354.                         Next
  355.                         ;检测鼠标是否在系统按钮区域,在则置hover标识
  356.                         For $iI = 1 To 7
  357.                                 If _WinAPI_PtInRect($topbutton[$iI - 1], $tPoint) Then
  358.                                         $onTopbuttonFlag = $iI
  359.                                         ExitLoop
  360.                                 EndIf
  361.                         Next
  362.                         ;处理hover重绘
  363.                         If $OnPanBtnFlag == 0 And $OnPanBtnNum <> $OnPanBtnFlag Then
  364.                                 $OnPanBtnNum = $OnPanBtnFlag
  365.                                 _DrawBk( _hoverBTN($SelectPanBtn, $OnPanBtnNum))
  366.                         ElseIf $onTopbuttonFlag == 0 And $onTopbuttonNum <> $onTopbuttonFlag Then
  367.                                 ToolTip("")
  368.                                 $onTopbuttonNum = $onTopbuttonFlag
  369.                                 _DrawBk( _hoverBTN($SelectPanBtn, $OnPanBtnNum))
  370.                         ElseIf $OnPanBtnFlag == 0 And $onTopbuttonFlag == 0 Then
  371.                                 If $DownTopbuttonNum > 0 Then
  372.                                         $DownTopbuttonNum = 0
  373.                                         _DrawBk( _hoverBTN($SelectPanBtn, 0))
  374.                                 EndIf
  375.                                 Return $HTCAPTION
  376.                         ElseIf $SelectPanBtn <> $OnPanBtnFlag And $OnPanBtnNum <> $OnPanBtnFlag Then
  377.                                 $OnPanBtnNum = $OnPanBtnFlag
  378.                                 $OnPanBtnFlag = 0
  379.                                 _DrawBk( _hoverBTN($SelectPanBtn, $OnPanBtnNum))
  380.                                 Return $HTOBJECT
  381.                         ElseIf $onTopbuttonFlag > 0 And $onTopbuttonNum <> $onTopbuttonFlag Then
  382.                                 $onTopbuttonNum = $onTopbuttonFlag
  383.                                 $onTopbuttonFlag = 0
  384.                                 _DrawBk(_topbutton($topbutton[$onTopbuttonNum - 1], $topbuttonhoverimg[$onTopbuttonNum - 1]))
  385.                                 ToolTip($topbuttontip[$onTopbuttonNum - 1], DllStructGetData($wrect, 1) + DllStructGetData($topbutton[$onTopbuttonNum - 1], 1), DllStructGetData($wrect, 2) + DllStructGetData($topbutton[$onTopbuttonNum - 1], 2) + 30)
  386.                                 Return $HTOBJECT
  387.                         EndIf
  388.         EndSwitch
  389. EndFunc   ;==>WM_NCHITTEST

  390. Func WM_LBUTTONDOWN($hWnd, $Msg, $wParam, $lParam);鼠标左键点击处理
  391.         Local $tPoint, $DownTopbuttonFlag, $DownPanBtnFlag
  392.         $tPoint = _WinAPI_GetMousePos(True, $hWnd)
  393.         Switch $hWnd
  394.                 Case $zhu_gui
  395.                         $DownPanBtnFlag = 0
  396.                         $DownTopbuttonFlag = 0
  397.                         ;检测鼠标是否在大图标区域,在则置hover标识
  398.                         For $iI = 1 To 6
  399.                                 If _WinAPI_PtInRect($PanBtnRect[$iI - 1], $tPoint) Then
  400.                                         $DownPanBtnFlag = $iI
  401.                                         ExitLoop
  402.                                 EndIf
  403.                         Next
  404.                         ;检测鼠标是否在系统按钮区域,在则置hover标识
  405.                         For $iI = 1 To 7
  406.                                 If _WinAPI_PtInRect($topbutton[$iI - 1], $tPoint) Then
  407.                                         $DownTopbuttonFlag = $iI
  408.                                         ExitLoop
  409.                                 EndIf
  410.                         Next
  411.                         ;处理对应的鼠标左键点击
  412.                         ;处理大图标区域的点击
  413.                         Switch $DownPanBtnFlag
  414.                                 Case 1
  415.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  416.                                                 $SelectPanBtn = $DownPanBtnFlag
  417.                                                 _DrawBk( _hoverBTN($SelectPanBtn, 0))
  418.                                                 GUICtrlSetData($mylabel, "第一页")
  419.                                         EndIf
  420.                                 Case 2
  421.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  422.                                                 $SelectPanBtn = $DownPanBtnFlag
  423.                                                 _DrawBk( _hoverBTN($SelectPanBtn, 0))
  424.                                                 GUICtrlSetData($mylabel, "第二页")
  425.                                         EndIf
  426.                                 Case 3
  427.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  428.                                                 $SelectPanBtn = $DownPanBtnFlag
  429.                                                 _DrawBk( _hoverBTN($SelectPanBtn, 0))
  430.                                                 GUICtrlSetData($mylabel, "第三页")
  431.                                         EndIf
  432.                                 Case 4
  433.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  434.                                                 $SelectPanBtn = $DownPanBtnFlag
  435.                                                 _DrawBk( _hoverBTN($SelectPanBtn, 0))
  436.                                                 GUICtrlSetData($mylabel, "第四页")
  437.                                         EndIf
  438.                                 Case 5
  439.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  440.                                                 $SelectPanBtn = $DownPanBtnFlag
  441.                                                 _DrawBk( _hoverBTN($SelectPanBtn, 0))
  442.                                                 GUICtrlSetData($mylabel, "第五页")
  443.                                         EndIf
  444.                                 Case 6
  445.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  446.                                                 $SelectPanBtn = $DownPanBtnFlag
  447.                                                 _DrawBk( _hoverBTN($SelectPanBtn, 0))
  448.                                                 GUICtrlSetData($mylabel, "第六页")
  449.                                         EndIf
  450.                         EndSwitch
  451.                         ;处理系统按钮区域的点击       
  452.                         Switch $DownTopbuttonFlag
  453.                                 Case 1 To 7
  454.                                         If $DownTopbuttonNum <> $DownTopbuttonFlag Then
  455.                                                 $DownTopbuttonNum = $DownTopbuttonFlag
  456.                                                 _DrawBk(_topbutton($topbutton[$DownTopbuttonNum - 1], $topbuttondownimg[$DownTopbuttonNum - 1]))
  457.                                                 ToolTip("")
  458.                                         EndIf
  459.                         EndSwitch
  460.         EndSwitch
  461. EndFunc   ;==>WM_LBUTTONDOWN

  462. Func WM_LBUTTONUP($hWnd, $Msg, $wParam, $lParam);鼠标左键释放处理
  463.         Local $tPoint, $DownTopbuttonFlag
  464.         $tPoint = _WinAPI_GetMousePos(True, $hWnd)
  465.         Switch $hWnd
  466.                 Case $zhu_gui
  467.                         $DownTopbuttonFlag = 0
  468.                         ;检测左键释放时d在系统按钮区域的位置
  469.                         For $iI = 1 To 7
  470.                                 If _WinAPI_PtInRect($topbutton[$iI - 1], $tPoint) Then
  471.                                         $DownTopbuttonFlag = $iI
  472.                                         ExitLoop
  473.                                 EndIf
  474.                         Next
  475.                         ;处理相应位置释放时的功能
  476.                         Switch $DownTopbuttonFlag
  477.                                 Case 1
  478.                                         exitfunc()
  479.                                 Case 2
  480.                                         $DownTopbuttonNum = 0
  481.                                         _DrawBk( _hoverBTN($SelectPanBtn, 0))
  482.                                         MsgBox(0, "", " 测试 ", 2, $zhu_gui)
  483.                                         Return
  484.                                 Case 3
  485.                                         $DownTopbuttonNum = 0
  486.                                         _DrawBk( _hoverBTN($SelectPanBtn, 0))
  487.                                         GUISetState(@SW_MINIMIZE, $zhu_gui)
  488.                                         ToolTip("")
  489.                                         Return
  490.                                 Case 4
  491.                                         $DownTopbuttonNum = 0
  492.                                         _DrawBk( _hoverBTN($SelectPanBtn, 0))
  493.                                         MsgBox(0, "", " 测试 ", 2, $zhu_gui)
  494.                                         Return
  495.                                 Case 5
  496.                                         $DownTopbuttonNum = 0
  497.                                         _DrawBk( _hoverBTN($SelectPanBtn, 0))
  498.                                         ShellExecute("http://www.autoitx.com/thread-28704-1-1.html")
  499.                                         Return
  500.                                 Case 6
  501.                                         _huanimg()
  502.                                         $DownTopbuttonNum = 0
  503.                                         Return
  504.                                 Case 7
  505.                                         _huanfu()
  506.                                         $DownTopbuttonNum = 0
  507.                                         Return
  508.                         EndSwitch
  509.         EndSwitch
  510. EndFunc   ;==>WM_LBUTTONUP

  511. ;圆角路径建立
  512. Func _myPath($myx, $myy, $mywidth, $myheight, $myround = 10, $dr = False, $myleftup = True, $myrightup = True, $myleftdown = True, $myrightdown = True)
  513.         Local $hPath = _GDIPlus_PathCreate()
  514.         If $dr Then ;为TRUE时返回二条阴影边的路径
  515.                 _GDIPlus_PathAddLine($hPath, $myx+$myround, $myy+$myheight, $myx+$mywidth-$myround, $myy+$myheight)
  516.                 _GDIPlus_PathAddArc($hPath, $myx + $mywidth - $myround - 1, $myy + $myheight - $myround - 1, $myround, $myround, 0, 90)
  517.                 _GDIPlus_PathAddLine($hPath, $myx+$mywidth, $myy+$myheight-$myround, $myx+$mywidth, $myy+$myround)
  518.                 Return $hPath
  519.         EndIf
  520.         If $myleftup Then
  521.                 _GDIPlus_PathAddArc($hPath, $myx, $myy, $myround, $myround, 180, 90)
  522.         Else
  523.                 _GDIPlus_PathAddLine($hPath, $myx, $myy, $myx, $myy)
  524.         EndIf
  525.         If $myrightup Then
  526.                 _GDIPlus_PathAddArc($hPath, $myx + $mywidth - $myround - 1, $myy, $myround, $myround, 270, 90)
  527.         Else
  528.                 _GDIPlus_PathAddLine($hPath, $myx + $mywidth - 1, $myy, $myx + $mywidth - 1, $myy)
  529.         EndIf
  530.         If $myrightdown Then
  531.                 _GDIPlus_PathAddArc($hPath, $myx + $mywidth - $myround - 1, $myy + $myheight - $myround - 1, $myround, $myround, 0, 90)
  532.         Else
  533.                 _GDIPlus_PathAddLine($hPath, $myx + $mywidth - 1, $myy + $myheight - 1, $myx + $mywidth - 1, $myy + $myheight - 1)
  534.         EndIf
  535.         If $myleftdown Then
  536.                 _GDIPlus_PathAddArc($hPath, $myx, $myy + $myheight - $myround - 1, $myround, $myround, 90, 90)
  537.         Else
  538.                 _GDIPlus_PathAddLine($hPath, $myx, $myy + $myheight - 1, $myx, $myy + $myheight - 1)
  539.         EndIf
  540.         _GDIPlus_PathCloseFigures($hPath)
  541.         Return $hPath
  542. EndFunc   ;==>_myPath

  543. Func _DrawBk($hBitMap);更新窗口
  544.         _WinAPI_UpdateLayeredWindowEx($zhu_gui, -1,-1, $hBitMap, 255, 1);可能3.3.7开始这个函数有改变,请在$hBitMap前加上二个参数-1,-1
  545. EndFunc   ;==>_DrawBk
复制代码

本帖子中包含更多资源

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

x

评分

12

查看全部评分

发表于 2011-11-14 12:37:50 | 显示全部楼层
呵呵 效果不错~!~支持下
发表于 2011-11-14 12:41:14 | 显示全部楼层
本帖最后由 .個朲綉√ 于 2011-11-14 13:08 编辑

太牛了,前排支持啊

WIN7 64位运行出错,选择X86运行正常.

本帖子中包含更多资源

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

x
 楼主| 发表于 2011-11-14 12:41:14 | 显示全部楼层
呵呵 效果不错~!~支持下
zcool321 发表于 2011-11-14 12:37

现在传好代码了
发表于 2011-11-14 12:46:43 | 显示全部楼层
看看啥内容
发表于 2011-11-14 12:58:04 | 显示全部楼层
哇,自定义皮肤耶
发表于 2011-11-14 12:58:14 | 显示全部楼层
效果不错,很强大
发表于 2011-11-14 13:23:21 | 显示全部楼层
太漂亮了,支持一下。
 楼主| 发表于 2011-11-14 13:24:28 | 显示全部楼层
太牛了,前排支持啊

WIN7 64位运行出错,选择X86运行正常.
.個朲綉√ 发表于 2011-11-14 12:41

坚决不装WIN7,不知道情况
发表于 2011-11-14 13:26:10 | 显示全部楼层
有点意思谢谢分享。
发表于 2011-11-14 13:27:10 | 显示全部楼层
回复看一下啦
发表于 2011-11-14 13:47:47 | 显示全部楼层
回复 1# seniors
这会看看能不能实现360效果GUI.
发表于 2011-11-14 13:55:04 | 显示全部楼层
回复 1# seniors
没找到这个函数啊?
;_RTEmptyWorkingSet()
给它注释掉了,呵呵!
 楼主| 发表于 2011-11-14 14:19:12 | 显示全部楼层
回复  seniors
没找到这个函数啊?
;_RTEmptyWorkingSet()
给它注释掉了,呵呵!
newuser 发表于 2011-11-14 13:55


压缩包里不是有Thread.au3,
_RTEmptyWorkingSet(),这句是减少内存占用的
发表于 2011-11-14 14:44:08 | 显示全部楼层
看上去不错,支持下哦,谢谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2019-5-20 01:56 , Processed in 0.062500 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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