zoukankan      html  css  js  c++  java
  • 用vb编写的qq靠边隐藏功能

         无论是qq还是飞信,都有靠边隐藏的功能,现在我就来给大家说说靠边隐藏是如何实现的。

        首先的知道3个ActiveX函数:

               1、GetCursorPos函数:该函数检取光标的位置,以屏幕坐标表示。

                                  参数:
                                                IpPoint:POINT结构指针,该结构接收光标的屏幕坐标。
                                                使用时要先定义一个数据结构:
                                                Public Type POINTAPI
                                                x As Long
                                                y As Long
                                                End Type

               2、GetWindowRect函数:该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。

                                   参数:

                                                hWnd:窗口句柄
                                                lpRect:指向一个RECT结构的指针,该结构接收窗口的左上角和右下角的屏幕坐标。
                                   变量
                                                left ;top; right;bottom;
                                                分别表示该窗口的/左侧/顶部/右侧/底部坐标
              3、SetWindowPos函数:该函数改变一个子窗口,弹出式窗口或顶层窗口的尺寸,位置和Z序。
                                                           子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。

                                    参数

    hWnd:窗口句柄
    hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。该参数必须为一个窗口句柄,或下列值之一:
    HWND_BOTTOM:将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。
    HWND_NOTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用。
    HWND_TOP:将窗口置于Z序的顶部。
    HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。
    查看该参数的使用方法,请看说明部分。
    x:以客户坐标指定窗口新位置的左边界。
    Y:以客户坐标指定窗口新位置的顶边界。
    cx:以像素指定窗口的新的宽度。
    cy:以像素指定窗口的新的高度。
    uFlags:窗口尺寸和定位的标志。该参数可以是下列值的组合:
    SWP_ASYNCWINDOWPOS:如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。这就防止调用线程在其他线程处理需求的时候发生死锁。
    SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。
    SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。
    SWP_FRAMECHANGED:给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。
    SWP_HIDEWINDOW;隐藏窗口。
    SWP_NOACTIVATE:不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。
    SWP_NOCOPYBITS:清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。
    SWP_NOMOVE:维持当前位置(忽略X和Y参数)。
    SWP_NOOWNERZORDER:不改变z序中的所有者窗口的位置。
    SWP_NOREDRAW:不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。
    SWP_NOREPOSITION;与SWP_NOOWNERZORDER标志相同。
    SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。
    SWP_NOSIZE:维持当前尺寸(忽略cx和Cy参数)。
    SWP_NOZORDER:维持当前Z序(忽略hWndlnsertAfter参数)。
    SWP_SHOWWINDOW:显示窗口。
    返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误消息,请调用GetLastError函数。

    认识了这些函数的用途,和参数,就可以轻松使用了。

             定义部分:

    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long


    Private Type POINTAPI
        x As Long
        y As Long
    End Type

    Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End Type

          利用timer事件来分析是否隐藏
    Private Sub Timer1_Timer()
        Dim p As POINTAPI
        Dim f As RECT
        GetCursorPos p '得到MOUSE位置
        GetWindowRect Me.hwnd, f '得到窗体的位置
        If Me.WindowState <> 1 Then
            If p.x > f.Left And p.x < f.Right And p.y > f.Top And p.y < f.Bottom Then
                'MOUSE 在窗体上
                If Me.Top < 0 Then
                    Me.Top = -10
                    Me.Show
                ElseIf Me.Left < 0 Then
                    Me.Left = -10
                    Me.Show
                ElseIf Me.Left + Me.Width >= Screen.Width Then
                    Me.Left = Screen.Width - Me.Width + 10
                    Me.Show
                End If
            Else
                If f.Top <= 4 Then
                    Me.Top = 40 - Me.Height
                ElseIf f.Left <= 4 Then
                    Me.Left = 40 - Me.Width
                ElseIf Me.Left + Me.Width >= Screen.Width - 4 Then
                    Me.Left = Screen.Width - 40
                End If
            End If
        End If
    End Sub

        这就是一个form窗体,将他放在你的软件中,就可以实现靠边隐藏的功能了。

  • 相关阅读:
    <script type="javascript"> 与<script language="javascript"> 有什么区别啊
    <script language="JavaScript"> or <script type="text/javascript"> ?
    EL表达式
    为什么我用花括号jsp上就显示不出括号里的内容啊,大侠们帮帮忙
    structs2:action如何从页面获取参数值以及如何向页面传出参数值(set方法 、get方法、getParameters()方法
    HTML <script> 标签的 type 属性
    EL表达式EL表达式
    EL表达式(详解)
    java时间戳是什么
    window.onload函数用法
  • 原文地址:https://www.cnblogs.com/itbole/p/3263834.html
Copyright © 2011-2022 走看看