找回密码  加入

AUTOIT CN

搜索
楼主: seniors

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

[复制链接]
发表于 2011-11-14 14:48:27 | 显示全部楼层
学习。。。
发表于 2011-11-14 14:57:37 | 显示全部楼层
效果很好哦~
测试了一下,反馈一点点小瑕疵:
1,工具提示显示后,在移到界面其它处消失,这是正常的。但在移到窗口外部时,却经常停留。
2,在按下按钮后(比如关闭按钮)在其它地方松开,此时再次去按它时该按钮已没有按下的效果。
3,在进行以上测试之后,偶尔会使按钮失效。
发表于 2011-11-14 15:53:34 | 显示全部楼层
学习下。。看看是什么。
 楼主| 发表于 2011-11-14 15:54:27 | 显示全部楼层
1,工具提示显示后,在移到界面其它处消失,这是正常的。但在移到窗口外部时,却经常停留。
2,在按下按钮后(比如关闭按钮)在其它地方松开,此时再次去按它时该按钮已没有按下的效果。
3,在进行以上测试之后,偶尔会使按钮失效afan 发表于 2011-11-14 14:57

谢谢测试,对于1、我现在也没找到办法,应该用的是tooltip,不知道怎么让它有时间限制自动消失
2、找到办法把nchittest函数改为
Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
        Local $tPoint = _WinAPI_GetMousePos(True, $hWnd)
        Local $wrect = _WinAPI_GetWindowRect($zhu_gui)
        Switch $hWnd
                Case $zhu_gui
                        $OnPanBtnFlag = 0
                        $onTopbuttonFlag = 0
                        For $iI = 1 To 6
                                If _WinAPI_PtInRect($PanBtnRect[$iI - 1], $tPoint) Then
                                        $OnPanBtnFlag = $iI
                                        ExitLoop
                                EndIf
                        Next
                        For $iI = 1 To 7
                                If _WinAPI_PtInRect($topbutton[$iI - 1], $tPoint) Then
                                        $onTopbuttonFlag = $iI
                                        ExitLoop
                                EndIf
                        Next
                        If $OnPanBtnFlag == 0 And $OnPanBtnNum <> $OnPanBtnFlag Then
                                $OnPanBtnNum = $OnPanBtnFlag
                                _hoverBTN($SelectPanBtn, $OnPanBtnNum)
                        ElseIf $onTopbuttonFlag == 0 And $onTopbuttonNum <> $onTopbuttonFlag Then
                                ToolTip("")
                                $onTopbuttonNum = $onTopbuttonFlag
                                _hoverBTN($SelectPanBtn, $OnPanBtnNum)
                        ElseIf $OnPanBtnFlag == 0 And $onTopbuttonFlag == 0  Then
                                If $DownTopbuttonNum > 0 Then
                                $DownTopbuttonNum = 0
                                _hoverBTN($SelectPanBtn, 0)
                                EndIf
                                Return $HTCAPTION
                        ElseIf $SelectPanBtn <> $OnPanBtnFlag And $OnPanBtnNum <> $OnPanBtnFlag Then
                                $OnPanBtnNum = $OnPanBtnFlag
                                $OnPanBtnFlag = 0
                                _hoverBTN($SelectPanBtn, $OnPanBtnNum)
                                Return $HTOBJECT
                        ElseIf $onTopbuttonFlag > 0 And $onTopbuttonNum <> $onTopbuttonFlag Then
                                $onTopbuttonNum = $onTopbuttonFlag
                                $onTopbuttonFlag = 0
                                _topbutton($topbutton[$onTopbuttonNum - 1], $topbuttonhoverimg[$onTopbuttonNum - 1])
                                ToolTip($topbuttontip[$onTopbuttonNum - 1], DllStructGetData($wrect, 1) + DllStructGetData($topbutton[$onTopbuttonNum - 1], 1), DllStructGetData($wrect, 2) + DllStructGetData($topbutton[$onTopbuttonNum - 1], 2) + 30)
                                Return $HTOBJECT
                        EndIf
        EndSwitch
EndFunc   ;==>WM_NCHITTEST

3、我也测试到了,还没找到原因,可能是画图问题,或者是减少内存占用造成的
发表于 2011-11-14 16:01:08 | 显示全部楼层
太漂亮了,支持一下。
发表于 2011-11-14 16:05:41 | 显示全部楼层
回复 1# seniors
代码看的头疼,能就下面的问题在相关代码给出注释吗?


1成功添加了一个image,做法如下:
;47行 由$PanBtnRect[6]改成$PanBtnRect[7]
;78行 由For $iI = 1 To 6改成For $iI = 1 To 7
;309行 由For $iI = 1 To 6改成For $iI = 1 To 7
;412行 Switch $DownPanBtnFlag 为新增图象添加响应
问题是:点击图象没反应,而且由于没找到调整图象的语句,导致与原有image排列出现不美观现象?
  1. #Region ACN预处理程序参数(常用参数)
  2. #PRE_Icon=                                                                                 ;图标,支持EXE,DLL,ICO
  3. #PRE_OutFile=                                                                        ;输出文件名
  4. #PRE_OutFile_Type=exe                                                        ;文件类型
  5. #PRE_Compression=4                                                                ;压缩等级
  6. #PRE_UseUpx=y                                                                         ;使用压缩
  7. #PRE_Res_Comment=                                                                 ;程序注释
  8. #PRE_Res_Description=                                                        ;详细信息
  9. #PRE_Res_Fileversion=                                                        ;文件版本
  10. #PRE_Res_FileVersion_AutoIncrement=p                        ;自动更新版本
  11. #PRE_Res_LegalCopyright=                                                 ;版权
  12. #PRE_Change2CUI=N                                           ;修改输出的程序为CUI(控制台程序)
  13. ;#PRE_Res_Field=AutoIt Version|%AutoItVer%                ;自定义资源段
  14. ;#PRE_Run_Tidy=                                                   ;脚本整理
  15. ;#PRE_Run_Obfuscator=                                                      ;代码迷惑
  16. ;#PRE_Run_AU3Check=                                                         ;语法检查
  17. ;#PRE_Run_Before=                                                                 ;运行前
  18. ;#PRE_Run_After=                                                                ;运行后
  19. ;#PRE_UseX64=n                                                                        ;使用64位解释器
  20. ;#PRE_Compile_Both                                                                ;进行双平台编译
  21. #EndRegion ACN预处理程序参数(常用参数)
  22. #cs ____________________________________
  23.        
  24.         Au3 版本:
  25.         脚本作者:
  26.         电子邮件:
  27.         QQ/TM:
  28.         脚本版本:
  29.         脚本功能:
  30.        
  31. #ce _______________脚本开始_________________

  32. #include <Constants.au3>
  33. #include <GUIConstantsEx.au3>
  34. #include <WindowsConstants.au3>
  35. #include <ButtonConstants.au3>
  36. #include <GDIPlusEx.au3>
  37. #include <Thread.au3>
  38. Opt('GUIOnEventMode', 1)
  39. _RTEmptyWorkingSet();Thread.au3里的函数,减少内存占用的
  40. Global $zhuwidth = 600, $zhuheight = 400, $winround = 10;主窗口的“宽和高”的设置
  41. Global $pifucolor[5] = [0xFF0860a8, 0xFFFFAA00, 0xFF00AAFF, 0xFF990000, 0xFF009a20], $pifu = 0;皮肤颜色
  42. Global $imgpifu[6] = ["", @ScriptDir & "\top\1.jpg", @ScriptDir & "\top\2.jpg", @ScriptDir & "\top\3.jpg", @ScriptDir & "\top\4.jpg", @ScriptDir & "\top\5.jpg"], $imgNum = 0
  43. ;以上几个 .jpg 是设置窗口“顶端背景”的,但我没测试出来?
  44. ;原来是通过”设置“菜单实现”换肤“的,竟然没注意到!
  45. _GDIPlus_Startup()
  46. Global $PanBtnRect[7], $SelectPanBtn = 1, $OnPanBtnNum = 0, $OnPanBtnFlag = 0
  47. Global $topbutton[7], $topbuttonhoverimg[7], $topbuttondownimg[7], $topbuttontip[7], $onTopbuttonFlag = 0, $onTopbuttonNum = 0, $DownTopbuttonNum = 0
  48. _initRect();应该是”初始化GUI右上角各个菜单的函数,如  皮肤、设置、反馈、最大(小)化、关闭

  49. Global $zhu_gui = GUICreate("360界面预览", $zhuwidth, $zhuheight, -1, -1, $WS_POPUP, $WS_EX_LAYERED);创建主窗口

  50. GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST');为一个已知的Windows消息代码“$WM_NCHITTEST"注册一个用户自定义函数"WM_NCHITTEST"
  51. GUIRegisterMsg($WM_LBUTTONDOWN, 'WM_LBUTTONDOWN')
  52. GUIRegisterMsg($WM_LBUTTONUP, 'WM_LBUTTONUP')

  53. $ne_gui = GUICreate("", $zhuwidth - 10, 260, 8, 110, $WS_POPUP, $WS_EX_MDICHILD, $zhu_gui)
  54. ;为主窗口$zhu_gui创建一个子窗口$ne_gui
  55. $mylabel = GUICtrlCreateLabel("第一页", 10, 10, $zhuwidth - 20, 30)
  56. GUICtrlSetFont(-1, 24)
  57. GUICtrlSetColor(-1, 0x0860a8)
  58. GUISetState(@SW_SHOW, $ne_gui)
  59. GUISetState(@SW_SHOW, $zhu_gui)


  60. _hoverBTN($SelectPanBtn, $OnPanBtnNum)

  61. While 1
  62.         Sleep(100)
  63. WEnd

  64. Func exitfunc();退出函数
  65.         _GDIPlus_Shutdown()
  66.         Exit
  67. EndFunc   ;==>exitfunc

  68. Func _initRect();应该是”初始化GUI右上角各个菜单的函数,如  皮肤、设置、反馈、最大(小)化、关闭
  69.         For $iI = 1 To 7
  70.                 $PanBtnRect[$iI - 1] = DllStructCreate($tagRECT)
  71.                 ;创建一个 C/C++ 样式的数据结构供 DllCall 使用.
  72.                 ;DllStructCreate ( "数据结构" [,指针] )
  73.                 DllStructSetData($PanBtnRect[$iI - 1], 1, 10 + ($iI - 1) * 70)
  74.                 DllStructSetData($PanBtnRect[$iI - 1], 2, 30)
  75.                 DllStructSetData($PanBtnRect[$iI - 1], 3, $iI * 70)
  76.                 DllStructSetData($PanBtnRect[$iI - 1], 4, 90)
  77.         Next
  78.        
  79.         Local $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnClose.png");加载GUI右上角那个“ X” Image图象
  80.         $mybtnx = $zhuwidth - 2 - _GDIPlus_ImageGetWidth($kzImage)
  81.         $topbutton[0] = DllStructCreate($tagRECT)
  82.         DllStructSetData($topbutton[0], 1, $mybtnx)
  83.         DllStructSetData($topbutton[0], 2, 1)
  84.         DllStructSetData($topbutton[0], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  85.         DllStructSetData($topbutton[0], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  86.         $topbuttonhoverimg[0] = @ScriptDir & "\top\TopPanelCloseOver.png"
  87.         ;当鼠标”移动“到GUI右上角那个“ X” Image图象 “上(over)时",所显示的 Image 图象
  88.         $topbuttondownimg[0] = @ScriptDir & "\top\TopPanelCloseDown.png"
  89.         ;当鼠标”点击“到GUI右上角那个“ X” Image图象 “上(down)时",所显示的 Image 图象
  90.         $topbuttontip[0] = "关闭程序"
  91.         ;当鼠标”移动“到GUI右上角那个“ X” Image图象时,所显示的”提示文字“
  92.        
  93.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnMax.png")
  94.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  95.         $topbutton[1] = DllStructCreate($tagRECT)
  96.         DllStructSetData($topbutton[1], 1, $mybtnx + 2)
  97.         DllStructSetData($topbutton[1], 2, 1)
  98.         DllStructSetData($topbutton[1], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  99.         DllStructSetData($topbutton[1], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  100.         $topbuttonhoverimg[1] = @ScriptDir & "\top\MiddleOver.png"
  101.         $topbuttondownimg[1] = @ScriptDir & "\top\MiddleDown.png"
  102.         $topbuttontip[1] = "最大化"
  103.        
  104.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnMin.png")
  105.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  106.         $topbutton[2] = DllStructCreate($tagRECT)
  107.         DllStructSetData($topbutton[2], 1, $mybtnx + 2)
  108.         DllStructSetData($topbutton[2], 2, 1)
  109.         DllStructSetData($topbutton[2], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  110.         DllStructSetData($topbutton[2], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  111.         $topbuttonhoverimg[2] = @ScriptDir & "\top\MiddleOver.png"
  112.         $topbuttondownimg[2] = @ScriptDir & "\top\MiddleDown.png"
  113.         $topbuttontip[2] = "最小化"
  114.        
  115.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnSetting.png")
  116.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  117.         $topbutton[3] = DllStructCreate($tagRECT)
  118.         DllStructSetData($topbutton[3], 1, $mybtnx + 2)
  119.         DllStructSetData($topbutton[3], 2, 1)
  120.         DllStructSetData($topbutton[3], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  121.         DllStructSetData($topbutton[3], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  122.         $topbuttonhoverimg[3] = @ScriptDir & "\top\MiddleOver.png"
  123.         $topbuttondownimg[3] = @ScriptDir & "\top\MiddleDown.png"
  124.         $topbuttontip[3] = "设置"
  125.        
  126.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnFeedback.png")
  127.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  128.         $topbutton[4] = DllStructCreate($tagRECT)
  129.         DllStructSetData($topbutton[4], 1, $mybtnx)
  130.         DllStructSetData($topbutton[4], 2, 1)
  131.         DllStructSetData($topbutton[4], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  132.         DllStructSetData($topbutton[4], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  133.         $topbuttonhoverimg[4] = @ScriptDir & "\top\over.png"
  134.         $topbuttondownimg[4] = @ScriptDir & "\top\mask.png"
  135.         $topbuttontip[4] = "反馈"
  136.        
  137.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\skin.png")
  138.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  139.         $topbutton[5] = DllStructCreate($tagRECT)
  140.         DllStructSetData($topbutton[5], 1, $mybtnx)
  141.         DllStructSetData($topbutton[5], 2, 1)
  142.         DllStructSetData($topbutton[5], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  143.         DllStructSetData($topbutton[5], 4, _GDIPlus_ImageGetHeight($kzImage) + 1)
  144.         $topbuttonhoverimg[5] = @ScriptDir & "\top\over.png"
  145.         $topbuttondownimg[5] = @ScriptDir & "\top\mask.png"
  146.         $topbuttontip[5] = "皮肤"
  147.        
  148.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnSkin.png")
  149.         $mybtnx = $zhuwidth - 20 - _GDIPlus_ImageGetWidth($kzImage)
  150.         $topbutton[6] = DllStructCreate($tagRECT)
  151.         DllStructSetData($topbutton[6], 1, $mybtnx)
  152.         DllStructSetData($topbutton[6], 2, 30)
  153.         DllStructSetData($topbutton[6], 3, $mybtnx + _GDIPlus_ImageGetWidth($kzImage))
  154.         DllStructSetData($topbutton[6], 4, _GDIPlus_ImageGetHeight($kzImage) + 30)
  155.         $topbuttonhoverimg[6] = @ScriptDir & "\top\over.png"
  156.         $topbuttondownimg[6] = @ScriptDir & "\top\mask.png"
  157.         $topbuttontip[6] = "配色"
  158.        
  159.         _GDIPlus_ImageDispose($kzImage);释放一个图象对象
  160. EndFunc   ;==>_initRect

  161. Func _myback($mywidth, $myheight, $mycolor = 0xFF0860a8, $myskin = "", $myround = 10, $myleftup = True, $myrightup = True, $myleftdown = True, $myrightdown = True)
  162.         Local $hHBITMAP = _WinAPI_CreateBitmap($mywidth, $myheight, 1, 32)
  163.         Local $hCDC = _WinAPI_CreateCompatibleDC(0)
  164.         Local $hOld = _WinAPI_SelectObject($hCDC, $hHBITMAP)
  165.         Local $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hCDC)
  166.         _GDIPlus_GraphicsClear($hGraphic, 0x00000000)
  167.         _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2);绘制质量 2 - 使用 8 X 8 矩形过滤器
  168.         _GDIPlus_GraphicsSetInterpolationMode($hGraphic, 7);插值法 7=High-quality, bicubic interpolation.
  169.         $hPath = _myPath(0, 0, $mywidth, $myheight)
  170.         $hPen = _GDIPlus_PenCreate(0xFF000000, 1, 0)
  171.         _GDIPlus_PenSetLineJoin($hPen, 2);2 - Line join produces a smooth, circular arc between the lines.
  172.         DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGraphic, "hwnd", $hPen, "hwnd", $hPath)
  173.         If $myskin = "" Then
  174.                 Local $tRect = _GDIPlus_RectFCreate(0, 0, 40, $myheight);设置区域色块
  175.                 Local $hBrush = _GDIPlus_LineBrushCreateFromRect($tRect, 0xaaffffff, $mycolor, 1, 3)
  176.                 Local $tBlends[5][2]
  177.                 $tBlends[0][0] = 4
  178.                 $tBlends[1][0] = 0.05
  179.                 $tBlends[1][1] = 0.0
  180.                 $tBlends[2][0] = 1
  181.                 $tBlends[2][1] = 0.05
  182.                 $tBlends[3][0] = 0.9
  183.                 $tBlends[3][1] = 0.9
  184.                 $tBlends[4][0] = 1
  185.                 $tBlends[4][1] = 1.0
  186.                 _GDIPlus_LineBrushSetBlend($hBrush, $tBlends)
  187.                 DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $hBrush, "hwnd", $hPath)
  188.                 _GDIPlus_BrushDispose($hBrush)
  189.         Else
  190.                 Local $kzImage = _GDIPlus_ImageLoadFromFile($myskin)
  191.                 Local $imgwidth = $mywidth
  192.                 If _GDIPlus_ImageGetWidth($kzImage) < $mywidth Then $imgwidth = _GDIPlus_ImageGetWidth($kzImage)
  193.                 Local $imgheight = $myheight
  194.                 If _GDIPlus_ImageGetHeight($kzImage) < $myheight Then $imgheight = _GDIPlus_ImageGetHeight($kzImage)
  195.                 $mypictexture = _GDIPlus_TextureCreate2($kzImage, 0, 0, $imgwidth, $imgheight, 3)
  196.                 DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $mypictexture, "hwnd", $hPath)
  197.                 _GDIPlus_BrushDispose($mypictexture)
  198.         EndIf
  199.         _GDIPlus_PathDispose($hPath)
  200.         _GDIPlus_PenDispose($hPen)
  201.         Local $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnClose.png")
  202.         $mybtnx = $mywidth - 2 - _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\TopPanelBtnMax.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\TopPanelBtnMin.png")
  208.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  209.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx, 1, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  210.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnSetting.png")
  211.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  212.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx, 1, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  213.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnFeedback.png")
  214.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  215.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx, 1, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  216.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\skin.png")
  217.         $mybtnx -= _GDIPlus_ImageGetWidth($kzImage)
  218.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx + 1, 2, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  219.         $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\top\TopPanelBtnSkin.png")
  220.         $mybtnx = $mywidth - 20 - _GDIPlus_ImageGetWidth($kzImage)
  221.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), $mybtnx, 30, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  222.         _GDIPlus_ImageDispose($kzImage)
  223.        
  224.         $hFamily = _GDIPlus_FontFamilyCreate("黑体")
  225.         $hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
  226.         $tLayout = _GDIPlus_RectFCreate(5, 5)
  227.         $hPath = _GDIPlus_PathCreate()
  228.         _GDIPlus_PathAddString($hPath,  "250流氓软件", $tLayout, $hFamily, 1, 9, 0);读取字体外形为路径;0是正常字,9是字号
  229.         ;设置窗口标题
  230.         DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $hBrush, "hwnd", $hPath)
  231.         _GDIPlus_PathDispose($hPath)
  232.         $hPath = _GDIPlus_PathCreate()
  233.         $tLayout = _GDIPlus_RectFCreate(5, $myheight - 25)
  234.         _GDIPlus_PathAddString($hPath,  "沙子制作 By seniors 2011", $tLayout, $hFamily, 0, 12, 0);读取字体外形为路径;0是正常字,16是字号
  235.         ;设置任务栏”提示内容“
  236.         DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $hBrush, "hwnd", $hPath)
  237.         _GDIPlus_PathDispose($hPath)
  238.         _GDIPlus_FontFamilyDispose($hFamily)
  239.         _GDIPlus_BrushDispose($hBrush)
  240.         _GDIPlus_GraphicsDispose($hGraphic)
  241.         _WinAPI_SelectObject($hCDC, $hOld)
  242.         _WinAPI_DeleteDC($hCDC)
  243.         Return $hHBITMAP
  244. EndFunc   ;==>_myback

  245. Func _hoverBTN($i, $j)
  246.         Local $hHBITMAP = _myback($zhuwidth, $zhuheight, $pifucolor[$pifu], $imgpifu[$imgNum], $winround, True, True, True, True)
  247.         Local $hCDC = _WinAPI_CreateCompatibleDC(0)
  248.         Local $hOld = _WinAPI_SelectObject($hCDC, $hHBITMAP)
  249.         Local $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hCDC)
  250.         $hPath = _myPath(8 + 70 * ($i - 1), 25, 66, 80, 5)
  251.         $hPen = _GDIPlus_PenCreate(0x33000000, 1, 0)
  252.         _GDIPlus_PenSetLineJoin($hPen, 2);2 - Line join produces a smooth, circular arc between the lines.
  253.         DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGraphic, "hwnd", $hPen, "hwnd", $hPath)
  254.         $hPath = _myPath(7 + 70 * ($i - 1), 24, 66, 80, 5)
  255.         $hPen = _GDIPlus_PenCreate(0x77FFFFFF, 1, 0)
  256.         _GDIPlus_PenSetLineJoin($hPen, 2);2 - Line join produces a smooth, circular arc between the lines.
  257.         DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGraphic, "hwnd", $hPen, "hwnd", $hPath)
  258.         $tRect = _GDIPlus_RectFCreate(0, 0, 70, 110);设置区域色块
  259.         $hBrush = _GDIPlus_LineBrushCreateFromRect($tRect, 0x99FFFFFF, 0x33FFFFFF, 1, 3)
  260.         Local $tBlends2[5][2]
  261.         $tBlends2[0][0] = 4
  262.         $tBlends2[1][0] = 0.01
  263.         $tBlends2[1][1] = 0.0
  264.         $tBlends2[2][0] = 0.1
  265.         $tBlends2[2][1] = 0.5
  266.         $tBlends2[3][0] = 1
  267.         $tBlends2[3][1] = 0.5
  268.         $tBlends2[4][0] = 1
  269.         $tBlends2[4][1] = 1.0
  270.         _GDIPlus_LineBrushSetBlend($hBrush, $tBlends2)
  271.         DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $hBrush, "hwnd", $hPath)
  272.         If $j <> 0 Then
  273.                 $hPath = _myPath(8 + 70 * ($j - 1), 25, 66, 80, 5)
  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.                 $hPath = _myPath(7 + 70 * ($j - 1), 24, 66, 80, 5)
  278.                 $hPen = _GDIPlus_PenCreate(0x33FFFFFF, 1, 0)
  279.                 _GDIPlus_PenSetLineJoin($hPen, 2);2 - Line join produces a smooth, circular arc between the lines.
  280.                 DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGraphic, "hwnd", $hPen, "hwnd", $hPath)
  281.                 $tRect = _GDIPlus_RectFCreate(0, 0, 70, 110);设置区域色块
  282.                 $hBrush = _GDIPlus_LineBrushCreateFromRect($tRect, 0x55FFFFFF, 0x11FFFFFF, 1, 3)
  283.                 Local $tBlends2[5][2]
  284.                 $tBlends2[0][0] = 4
  285.                 $tBlends2[1][0] = 0.01
  286.                 $tBlends2[1][1] = 0.0
  287.                 $tBlends2[2][0] = 0.1
  288.                 $tBlends2[2][1] = 0.5
  289.                 $tBlends2[3][0] = 1
  290.                 $tBlends2[3][1] = 0.5
  291.                 $tBlends2[4][0] = 1
  292.                 $tBlends2[4][1] = 1.0
  293.                 _GDIPlus_LineBrushSetBlend($hBrush, $tBlends2)
  294.                 DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphic, "hwnd", $hBrush, "hwnd", $hPath)
  295.         EndIf
  296.         _GDIPlus_PenDispose($hPen)
  297.         _GDIPlus_BrushDispose($hBrush)
  298.         For $iI = 1 To 7
  299.                 $kzImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\app" & $iI & ".png");加载应用图象用的
  300.                 _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), DllStructGetData($PanBtnRect[$iI - 1], 1), DllStructGetData($PanBtnRect[$iI - 1], 2), 70, 70)
  301.         Next
  302.         _GDIPlus_ImageDispose($kzImage)
  303.         _GDIPlus_GraphicsDispose($hGraphic)
  304.         _WinAPI_SelectObject($hCDC, $hOld)
  305.         _WinAPI_DeleteDC($hCDC)
  306.         _WinAPI_UpdateLayeredWindowEx($zhu_gui, $hHBITMAP, 255);可能3.3.7开始这个函数有改变,请在$hHBITMAP前加上二个参数-1,-1
  307.         Return $hHBITMAP
  308. EndFunc   ;==>_hoverBTN

  309. Func _huanfu()
  310.         $pifu += 1
  311.         $imgNum = 0
  312.         If $pifu == UBound($pifucolor) Then $pifu = 0;UBound($pifucolor) 返回数组 $pifucolor的维度大小
  313.         _hoverBTN($SelectPanBtn, $OnPanBtnNum)
  314. EndFunc   ;==>_huanfu

  315. Func _huanimg()
  316.         $imgNum += 1
  317.         If $imgNum == UBound($imgpifu) Then $imgNum = 1
  318.         _hoverBTN($SelectPanBtn, $OnPanBtnNum)
  319. EndFunc   ;==>_huanimg

  320. Func _topbutton($btRect, $file)
  321.         Local $hHBITMAP = _hoverBTN($SelectPanBtn, $OnPanBtnNum)
  322.         Local $hCDC = _WinAPI_CreateCompatibleDC(0)
  323.         Local $hOld = _WinAPI_SelectObject($hCDC, $hHBITMAP)
  324.         Local $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hCDC)
  325.         Local $kzImage = _GDIPlus_ImageLoadFromFile($file)
  326.         _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $kzImage, 0, 0, _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage), DllStructGetData($btRect, 1), DllStructGetData($btRect, 2), _GDIPlus_ImageGetWidth($kzImage), _GDIPlus_ImageGetHeight($kzImage))
  327.         _GDIPlus_ImageDispose($kzImage)
  328.         _GDIPlus_GraphicsDispose($hGraphic)
  329.         _WinAPI_SelectObject($hCDC, $hOld)
  330.         _WinAPI_DeleteDC($hCDC)
  331.         _WinAPI_UpdateLayeredWindowEx($zhu_gui, $hHBITMAP, 255);可能3.3.7开始这个函数有改变,请在$hHBITMAP前加上二个参数-1,-1
  332.         Return $hHBITMAP
  333. EndFunc   ;==>_topbutton

  334. Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
  335.         Local $tPoint, $x, $y
  336.         $tPoint = _WinAPI_GetMousePos(True, $hWnd)
  337.         Switch $hWnd
  338.                 Case $zhu_gui
  339.                         $OnPanBtnFlag = 0
  340.                         $onTopbuttonFlag = 0
  341.                         For $iI = 1 To 6
  342.                                 If _WinAPI_PtInRect($PanBtnRect[$iI - 1], $tPoint) Then
  343.                                         $OnPanBtnFlag = $iI
  344.                                         ExitLoop
  345.                                 EndIf
  346.                         Next
  347.                         For $iI = 1 To 7
  348.                                 If _WinAPI_PtInRect($topbutton[$iI - 1], $tPoint) Then
  349.                                         $onTopbuttonFlag = $iI
  350.                                         ExitLoop
  351.                                 EndIf
  352.                         Next
  353.                         If $OnPanBtnFlag == 0 And $OnPanBtnNum <> $OnPanBtnFlag Then
  354.                                 $OnPanBtnNum = $OnPanBtnFlag
  355.                                 _hoverBTN($SelectPanBtn, $OnPanBtnNum)
  356.                         ElseIf $onTopbuttonFlag == 0 And $onTopbuttonNum <> $onTopbuttonFlag Then
  357.                                 ToolTip("")
  358.                                 $onTopbuttonNum = $onTopbuttonFlag
  359.                                 _hoverBTN($SelectPanBtn, $OnPanBtnNum)
  360.                         ElseIf $OnPanBtnFlag == 0 And $onTopbuttonFlag == 0 Then
  361.                                 Return $HTCAPTION
  362.                         ElseIf $SelectPanBtn <> $OnPanBtnFlag And $OnPanBtnNum <> $OnPanBtnFlag Then
  363.                                 $OnPanBtnNum = $OnPanBtnFlag
  364.                                 $OnPanBtnFlag = 0
  365.                                 _hoverBTN($SelectPanBtn, $OnPanBtnNum)
  366.                                 Return $HTOBJECT
  367.                         ElseIf $onTopbuttonFlag > 0 And $onTopbuttonNum <> $onTopbuttonFlag Then
  368.                                 $onTopbuttonNum = $onTopbuttonFlag
  369.                                 $onTopbuttonFlag = 0
  370.                                 _topbutton($topbutton[$onTopbuttonNum - 1], $topbuttonhoverimg[$onTopbuttonNum - 1])
  371.                                 Local $wrect = _WinAPI_GetWindowRect($zhu_gui)
  372.                                 ToolTip($topbuttontip[$onTopbuttonNum - 1], DllStructGetData($wrect, 1) + DllStructGetData($topbutton[$onTopbuttonNum - 1], 1), DllStructGetData($wrect, 2) + DllStructGetData($topbutton[$onTopbuttonNum - 1], 2) + 30)
  373.                                 Return $HTOBJECT
  374.                         EndIf
  375.         EndSwitch
  376. EndFunc   ;==>WM_NCHITTEST

  377. Func WM_LBUTTONDOWN($hWnd, $Msg, $wParam, $lParam)
  378.         Local $tPoint, $DownTopbuttonFlag, $DownPanBtnFlag
  379.         $tPoint = _WinAPI_GetMousePos(True, $hWnd)
  380.         Switch $hWnd
  381.                 Case $zhu_gui
  382.                         $DownPanBtnFlag = 0
  383.                         $DownTopbuttonFlag = 0
  384.                         For $iI = 1 To 6
  385.                                 If _WinAPI_PtInRect($PanBtnRect[$iI - 1], $tPoint) Then
  386.                                         $DownPanBtnFlag = $iI
  387.                                         ExitLoop
  388.                                 EndIf
  389.                         Next
  390.                         For $iI = 1 To 7
  391.                                 If _WinAPI_PtInRect($topbutton[$iI - 1], $tPoint) Then
  392.                                         $DownTopbuttonFlag = $iI
  393.                                         ExitLoop
  394.                                 EndIf
  395.                         Next
  396.                         Switch $DownPanBtnFlag
  397.                                 Case 1
  398.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  399.                                                 $SelectPanBtn = $DownPanBtnFlag
  400.                                                 _hoverBTN($SelectPanBtn, 0)
  401.                                                 GUICtrlSetData($mylabel, "第一页")
  402.                                         EndIf
  403.                                 Case 2
  404.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  405.                                                 $SelectPanBtn = $DownPanBtnFlag
  406.                                                 _hoverBTN($SelectPanBtn, 0)
  407.                                                 GUICtrlSetData($mylabel, "第二页")
  408.                                         EndIf
  409.                                 Case 3
  410.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  411.                                                 $SelectPanBtn = $DownPanBtnFlag
  412.                                                 _hoverBTN($SelectPanBtn, 0)
  413.                                                 GUICtrlSetData($mylabel, "第三页")
  414.                                         EndIf
  415.                                 Case 4
  416.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  417.                                                 $SelectPanBtn = $DownPanBtnFlag
  418.                                                 _hoverBTN($SelectPanBtn, 0)
  419.                                                 GUICtrlSetData($mylabel, "第四页")
  420.                                         EndIf
  421.                                 Case 5
  422.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  423.                                                 $SelectPanBtn = $DownPanBtnFlag
  424.                                                 _hoverBTN($SelectPanBtn, 0)
  425.                                                 GUICtrlSetData($mylabel, "第五页")
  426.                                         EndIf
  427.                                 Case 6
  428.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  429.                                                 $SelectPanBtn = $DownPanBtnFlag
  430.                                                 _hoverBTN($SelectPanBtn, 0)
  431.                                                 GUICtrlSetData($mylabel, "第六页")
  432.                                         EndIf
  433.                                 Case 7
  434.                                         If $SelectPanBtn <> $DownPanBtnFlag Then
  435.                                                 $SelectPanBtn = $DownPanBtnFlag
  436.                                                 _hoverBTN($SelectPanBtn, 0)
  437.                                                 GUICtrlSetData($mylabel, "第七页")
  438.                                         EndIf
  439.                         EndSwitch
  440.                         Switch $DownTopbuttonFlag
  441.                                 Case 1 To 7
  442.                                         If $DownTopbuttonNum <> $DownTopbuttonFlag Then
  443.                                                 $DownTopbuttonNum = $DownTopbuttonFlag
  444.                                                 _topbutton($topbutton[$DownTopbuttonNum - 1], $topbuttondownimg[$DownTopbuttonNum - 1])
  445.                                                 ToolTip("")
  446.                                         EndIf
  447.                         EndSwitch
  448.         EndSwitch
  449. EndFunc   ;==>WM_LBUTTONDOWN

  450. Func WM_LBUTTONUP($hWnd, $Msg, $wParam, $lParam)
  451.         Local $tPoint, $DownTopbuttonFlag
  452.         $tPoint = _WinAPI_GetMousePos(True, $hWnd)
  453.         Switch $hWnd
  454.                 Case $zhu_gui
  455.                         $DownTopbuttonFlag = 0
  456.                         For $iI = 1 To 7
  457.                                 If _WinAPI_PtInRect($topbutton[$iI - 1], $tPoint) Then
  458.                                         $DownTopbuttonFlag = $iI
  459.                                         ExitLoop
  460.                                 EndIf
  461.                         Next
  462.                         Switch $DownTopbuttonFlag
  463.                                 Case 1
  464.                                         exitfunc()
  465.                                 Case 2
  466.                                         $DownTopbuttonNum = 0
  467.                                         _hoverBTN($SelectPanBtn, 0)
  468.                                         MsgBox(0, "", " 测试 ", 2, $zhu_gui)
  469.                                         Return
  470.                                 Case 3
  471.                                         $DownTopbuttonNum = 0
  472.                                         _hoverBTN($SelectPanBtn, 0)
  473.                                         GUISetState(@SW_MINIMIZE, $zhu_gui)
  474.                                         ToolTip("")
  475.                                         Return
  476.                                 Case 4
  477.                                         $DownTopbuttonNum = 0
  478.                                         _hoverBTN($SelectPanBtn, 0)
  479.                                         MsgBox(0, "", " 测试 ", 2, $zhu_gui)
  480.                                         Return
  481.                                 Case 5
  482.                                         $DownTopbuttonNum = 0
  483.                                         _hoverBTN($SelectPanBtn, 0)
  484.                                         ShellExecute("http://www.autoitx.com/thread-28704-1-1.html")
  485.                                         Return
  486.                                 Case 6
  487.                                         _huanimg()
  488.                                         $DownTopbuttonNum = 0
  489.                                         Return
  490.                                 Case 7
  491.                                         _huanfu()
  492.                                         $DownTopbuttonNum = 0
  493.                                         Return
  494.                         EndSwitch
  495.         EndSwitch
  496. EndFunc   ;==>WM_LBUTTONUP

  497. Func _myPath($myx, $myy, $mywidth, $myheight, $myround = 10, $myleftup = True, $myrightup = True, $myleftdown = True, $myrightdown = True)
  498.         Local $hPath = _GDIPlus_PathCreate()
  499.         If $myleftup Then
  500.                 _GDIPlus_PathAddArc($hPath, $myx, $myy, $myround, $myround, 180, 90)
  501.         Else
  502.                 _GDIPlus_PathAddLine($hPath, $myx, $myy, $myx, $myy)
  503.         EndIf
  504.         If $myrightup Then
  505.                 _GDIPlus_PathAddArc($hPath, $myx + $mywidth - $myround - 1, $myy, $myround, $myround, 270, 90)
  506.         Else
  507.                 _GDIPlus_PathAddLine($hPath, $myx + $mywidth - 1, $myy, $myx + $mywidth - 1, $myy)
  508.         EndIf
  509.         If $myrightdown Then
  510.                 _GDIPlus_PathAddArc($hPath, $myx + $mywidth - $myround - 1, $myy + $myheight - $myround - 1, $myround, $myround, 0, 90)
  511.         Else
  512.                 _GDIPlus_PathAddLine($hPath, $myx + $mywidth - 1, $myy + $myheight - 1, $myx + $mywidth - 1, $myy + $myheight - 1)
  513.         EndIf
  514.         If $myleftdown Then
  515.                 _GDIPlus_PathAddArc($hPath, $myx, $myy + $myheight - $myround - 1, $myround, $myround, 90, 90)
  516.         Else
  517.                 _GDIPlus_PathAddLine($hPath, $myx, $myy + $myheight - 1, $myx, $myy + $myheight - 1)
  518.         EndIf
  519.         _GDIPlus_PathCloseFigures($hPath)
  520.         Return $hPath
  521. EndFunc   ;==>_myPath
复制代码
发表于 2011-11-14 16:17:44 | 显示全部楼层
界面漂亮,值得学习!
 楼主| 发表于 2011-11-14 16:25:44 | 显示全部楼层
回复  seniors
代码看的头疼,能就下面的问题在相关代码给出注释吗?


1成功添加了一个image,做法如下: ...
newuser 发表于 2011-11-14 16:05


WM_NCHITTEST还有WM_LBUTTONDOWN中的
For $iI = 1 To 6
                                If _WinAPI_PtInRect($PanBtnRect[$iI - 1], $tPoint) Then
                                        $DownPanBtnFlag = $iI
                                        ExitLoop
                                EndIf
                        Next


改成1 to 7

下次有空再做的好改动一些,尽量函数化,再添加说明,这种小代码重复工作我一般不加说明
 楼主| 发表于 2011-11-14 16:30:34 | 显示全部楼层
回复  seniors
代码看的头疼,能就下面的问题在相关代码给出注释吗?


1成功添加了一个image,做法如下: ...
newuser 发表于 2011-11-14 16:05


注释的挺到位的啊,呵
发表于 2011-11-14 17:29:01 | 显示全部楼层
偶像啊,我正在学习这一方面的东东
发表于 2011-11-14 17:33:24 | 显示全部楼层
超好的东西。学习。。。
发表于 2011-11-14 17:51:06 | 显示全部楼层
回复看看是怎样的
发表于 2011-11-14 17:53:46 | 显示全部楼层
漂亮  支持LZ开源
发表于 2011-11-14 17:55:40 | 显示全部楼层
非常不错 希望放出源码学习学习~~~
发表于 2011-11-14 18:33:27 | 显示全部楼层
什么东东,研究一下
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2018-10-15 17:40 , Processed in 0.097899 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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