找回密码
 加入
搜索
楼主: wsfda

[GUI管理] 如何使gui窗口靠近桌面边缘时自动隐藏?

 火... [复制链接]
发表于 2011-6-1 14:46:29 | 显示全部楼层
学会搜索嘛这个早就有了啊
发表于 2011-6-12 09:55:17 | 显示全部楼层
好,又学会一招
发表于 2011-6-12 10:59:22 | 显示全部楼层
代码收下了,学习学习
发表于 2011-6-13 00:04:40 | 显示全部楼层
可以做为鼠标和窗口操做的例子。
发表于 2011-6-13 07:55:42 | 显示全部楼层

评分

参与人数 1金钱 -30 收起 理由
hzxymkb -30

查看全部评分

发表于 2011-6-16 16:07:43 | 显示全部楼层
留个记号,以后慢慢消化
发表于 2011-6-21 20:37:58 | 显示全部楼层

评分

参与人数 1金钱 -30 收起 理由
hzxymkb -30

查看全部评分

发表于 2011-6-24 19:07:36 | 显示全部楼层
这东西,看着看着外边就下雨了
发表于 2011-7-2 15:51:08 | 显示全部楼层
搜索一下一大把
发表于 2011-7-2 17:15:07 | 显示全部楼层
很好的代码,谢谢分享。
发表于 2011-7-11 20:56:06 | 显示全部楼层
这个好像有点问题,窗口有时会突然最大化。。。。
发表于 2011-7-12 02:03:44 | 显示全部楼层
本帖最后由 happytc 于 2011-7-12 03:33 编辑

看到居然这么多人对这个感兴趣,贴一个我以前写的这个功能的函数:


Func HideCaptureBar($hwdGuiBar, $Duration = 500)
        Local $MousePos, $WinPos, $AW_SHOW = 0, $Flag = 0
        
        If Not IsHWnd($hwdGuiBar) Then Return
        
        $MousePos = MouseGetPos()
        $WinPos = WinGetPos($hwdGuiBar)        
        If Not IsArray($WinPos) Or Not IsArray($MousePos) Then Return
        
        If $MousePos[1] <= 1 And Not BitAND(WinGetState($hwdGuiBar), 2) Then
                If $WinPos[1] < 0 Then 
                        $WinPos[1] = 0
                        WinMove($hwdGuiBar, "", $WinPos[0], $WinPos[1])
                EndIf                
                _WinAPI_AnimateWindow($hwdGuiBar, $AW_SLIDE + $AW_SHOW + $AW_VER_POSITIVE, $Duration)
                $Flag = 1
        ElseIf $MousePos[1] >= @DesktopHeight - 1 And Not BitAND(WinGetState($hwdGuiBar), 2) Then
                If $WinPos[1] > @DesktopHeight - $WinPos[3] Then 
                        $WinPos[1] = @DesktopHeight - $WinPos[3]
                        WinMove($hwdGuiBar, "", $WinPos[0], $WinPos[1])
                EndIf                
                _WinAPI_AnimateWindow($hwdGuiBar, $AW_SLIDE + $AW_SHOW + $AW_VER_NEGATIVE, $Duration)
                $Flag = 1
        ElseIf $MousePos[0] >= @DesktopWidth - 1 And Not BitAND(WinGetState($hwdGuiBar), 2) Then
                If $WinPos[0] > @DesktopWidth - $WinPos[2] Then
                        $WinPos[0] = @DesktopWidth - $WinPos[2]
                        WinMove($hwdGuiBar, "", $WinPos[0], $WinPos[1])
                EndIf                
                _WinAPI_AnimateWindow($hwdGuiBar, $AW_SLIDE + $AW_SHOW + $AW_HOR_NEGATIVE, $Duration)        
                $Flag = 1
        ElseIf $MousePos[0] <= 1 And Not BitAND(WinGetState($hwdGuiBar), 2) Then
                If $WinPos[0] < 0 Then
                        $WinPos[0] = 0
                        WinMove($hwdGuiBar, "", $WinPos[0], $WinPos[1])
                EndIf                
                _WinAPI_AnimateWindow($hwdGuiBar, $AW_SLIDE + $AW_SHOW + $AW_HOR_POSITIVE, $Duration)        
                $Flag = 1        
        EndIf
        
        If $Flag Then Return

        If $WinPos[1] < 0 And BitAND(WinGetState($hwdGuiBar), 2) Then
                _WinAPI_AnimateWindow($hwdGuiBar, $AW_SLIDE + $AW_HIDE + $AW_VER_NEGATIVE, $Duration)                 
        ElseIf $WinPos[1] + $WinPos[3] > @DesktopHeight And BitAND(WinGetState($hwdGuiBar), 2) Then
                _WinAPI_AnimateWindow($hwdGuiBar, $AW_SLIDE + $AW_HIDE + $AW_VER_POSITIVE, $Duration)                
        ElseIf $WinPos[0] + $WinPos[2] > @DesktopWidth And BitAND(WinGetState($hwdGuiBar), 2)  Then
                _WinAPI_AnimateWindow($hwdGuiBar, $AW_SLIDE + $AW_HIDE + $AW_HOR_POSITIVE, $Duration)
        ElseIf $WinPos[0] < 0 And BitAND(WinGetState($hwdGuiBar), 2)  Then
                _WinAPI_AnimateWindow($hwdGuiBar, $AW_SLIDE + $AW_HIDE + $AW_HOR_NEGATIVE, $Duration)
        EndIf
EndFunc
发表于 2011-7-12 09:32:44 | 显示全部楼层
楼上的大侠,用不了呀,用的是最新WinAPIEx_3.3....
发表于 2011-7-12 09:50:34 | 显示全部楼层
回复 28# forestchi


    这个问问题的方式
就一信息都没有,啥叫“用不了呀”
你只少得给出错误信息吧,不然,我怎么知道你用不了呢?
发表于 2011-7-12 10:07:25 | 显示全部楼层
回复 28# forestchi


    自己定义下_WinAPI_AnimateWindow函数就可以了
Func _WinAPI_AnimateWindow($hWnd, $iFlags, $iDuration = 500)
        Local $ret = DllCall('user32.dll', 'int', 'AnimateWindow', 'hwnd', $hWnd, 'dword', $iDuration, 'dword', $iFlags)
        If (@error) Or (Not $ret[0]) Then
                Return SetError(1, 0, 0)
        EndIf
        Return 1
EndFunc

常量也自己定义,在:http://msdn.microsoft.com/en-us/library/ms632669(v=vs.85).aspx

很可能你用的不是跟WinAPIEx配套的别的函数,特别常量的定义
所以最好不要单独更某个函数,还是用官方统一更新的函数包吧
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-10 04:50 , Processed in 0.072976 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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