1、新建EXE工程。
2、添加模块,键入以下代码:
'------------------- Module ---------------------------------------
' 2003-9-10
' 作者:任兀(DSclub)
'
'如果有问题
'请E-Mail:dsclub@hotmail.com
'
'--------------------------------------------------------
'--------------------------------------------------------
'----------- 说明 -----------------
'修改Private Const Margin As Long 的值可以改变吸附距离
'将本模块考入你的程序,然后在你的代码中写入Hook和Unhook即可
'
'----------------------------------------------------------------

Public Declare Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" ( _
     ByVal uAction As Long, _
     ByVal uParam As Long, _
     lpvParam As Any, _
     ByVal fuWinIni As Long) As Long '去掉lpvParam的Byval修饰符才可以正常工作
    
Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _
     ByVal hwnd As Long, _
     ByVal nIndex As Long, _
     ByVal dwNewLong As Long) As Long
Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _
     ByVal hwnd As Long, _
     ByVal nIndex As Long) As Long
Public Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" ( _
     ByVal lpPrevWndFunc As Long, _
     ByVal hwnd As Long, _
     ByVal msg As Long, _
     ByVal wParam As Long, _
     ByVal lParam As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
   Destination As Any, _
   Source As Any, _
   ByVal Length As Long)
    
    
Public Type WINDOWPOS
    hwnd As Long
    hWndInsertAfter As Long
    x As Long
    y As Long
    cx As Long
    cy As Long
    flags As Long
End Type

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

Public Const SPI_GETWORKAREA As Long = 48
Public Const GWL_WNDPROC As Long = -4
Public Const WM_WINDOWPOSCHANGING As Long = &H46

Global lpPrevWndProc As Long
Global gHW As Long
Private Const Margin As Long = 20

Public Sub Hook()
   lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Public Sub Unhook()
   Dim temp As Long
   temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
End Sub

Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim lpwndpos As WINDOWPOS
Dim WorkArea As RECT

If uMsg = WM_WINDOWPOSCHANGING Then
      SystemParametersInfo SPI_GETWORKAREA, 0, WorkArea, 0
      CopyMemory lpwndpos, ByVal lParam, Len(lpwndpos)
     
      If lpwndpos.x - WorkArea.Left < Margin And WorkArea.Left - lpwndpos.x < Margin Then lpwndpos.x = 0
      If lpwndpos.y - WorkArea.Top < Margin And WorkArea.Top - lpwndpos.y < Margin Then lpwndpos.y = 0
      If WorkArea.Right - lpwndpos.x - lpwndpos.cx < Margin And lpwndpos.x + lpwndpos.cx - WorkArea.Right < Margin Then lpwndpos.x = WorkArea.Right - lpwndpos.cx
      If WorkArea.Bottom - lpwndpos.y - lpwndpos.cy < Margin And lpwndpos.y + lpwndpos.cy - WorkArea.Bottom < Margin Then lpwndpos.y = WorkArea.Bottom - lpwndpos.cy
     
      CopyMemory ByVal lParam, lpwndpos, Len(lpwndpos)
    End If
   
    WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Function

3、在Form1的代码中键入:
Private Sub Form_Load()
  gHW = Me.hwnd
  Hook
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Unhook
End Sub

4、运行。

挺简单的。

VB6实现的自动停靠窗体相关推荐

  1. 模拟QQ自动隐藏窗体

    //--------------------------------------------------------------------------- // 代码名称:模拟QQ自动隐藏窗体 //  ...

  2. android仿苹果悬浮窗(自动停靠、随手指滑动、返回主屏幕)

    说明:本人写博客一来是为了方便日后查看项目,二来是希望能够和广大的程序猿相互交流学习,文章布局简单,如有嫌弃,请绕行,如有错误,请指出,谢谢. 实验环境:安卓6.0 魅族手机 悬浮窗主要有以下几个功能 ...

  3. VC2010 中 MFC 的改进导致 XTP 停靠窗体无法显示的解决方法

    XTP( xtreme ToolKit Pro )界面库是基于 MFC 扩展的优秀的界面库,公司的项目一直在使用,但是最近尝试使用 VS2010 编辑工程时发现,停靠窗口居然消失了,跟踪消息发现停靠窗 ...

  4. java中gui_java GUI 快速入门

    java 中编写 GUI 有两中工具包,分别为 AWT.Swing. Swing 是 AWT 的拓展,Swing 具有比 AWT 丰富的组件和方法. AWT 和 Swing 都能跨平台使用:AWT 会 ...

  5. 开发精彩实例:窗体自动隐藏

    最近写个小程序,想让窗体自动隐藏,到csdn搜索,发现不少网友问这个问题,可是具体实现的例子不多,我经过琢磨,实现可记录停靠位置,可左上右三方停靠并隐藏.现将实现的例子拿出来供大家参考.  实现窗体自 ...

  6. C# 实现类似QQ的窗体在桌面边缘停靠和隐藏

    设计思路: 1.使用定时器(Timer)来监控鼠标位置和窗体位置,并实现窗体的停靠和隐藏 2.当鼠标拖动窗体时,窗体才有可能根据自身位置决定是否停靠 3.如果窗体四周没有接触到屏幕边缘则不会停靠 4. ...

  7. C#.NET 窗体停靠控件WeifenLuo.WinFormsUI.Docking.dll的使用

    源码:https://github.com/dockpanelsuite/dockpanelsuite https://www.cnblogs.com/wuhuacong/archive/2009/0 ...

  8. 高级停靠(Dock)技术的实现

    所谓停靠就是可以用鼠标拖动窗体或者控件,并将其从一个父窗体移出或者移动到另一个父窗体上,可以按水平,垂直方 向整齐排列, 并且可以停靠在分页控制组件上.下面的示意图是一个Delphi IDE的窗口停靠 ...

  9. VB6.0中的窗口控制技巧(1)

    移动没有标题栏的窗口 我们一般是用鼠标按住窗口的标题栏,然后移动窗口,当窗口没有标题栏时,我们可以用下面的方法来移动窗口: 在 BAS 文件中声明: Declare Function ReleaseC ...

最新文章

  1. 学会这些Python美图技巧,就等女朋友夸我了
  2. 通过XmlDocument读写Xml文档(转)
  3. datagridview java_仅更新datagridview中的一个单元格
  4. 数字图像处理:第十七章 纹理分析
  5. asp.net机器人注册原理
  6. 线性动态电路的复频域分析
  7. 牛客xiao白月赛32-- 拼三角(暴力却有坑)
  8. adcetris研发历程_抗体类药物质量控制—张伯彦20130730.pdf
  9. 仿Android 5.0 侧滑菜单按钮动画 以及侧滑菜单联动
  10. 数字图像处理的起源与应用
  11. 【数学】扩展欧几里得算法
  12. QT全局钩子监控鼠标和键盘
  13. 一对一直播怎么开发?一对一直播app开发关键点
  14. 下拉列表之前后端交互
  15. 德尔福ESR雷达测试
  16. Centos8重启网卡的问题
  17. K210--运行NOMMU linux
  18. 排列组合公式 与24点编程游戏
  19. P25边缘保留滤波(EPF滤波)
  20. java 模拟电梯_请使用的Java的多线程知识来编写一个程序,实现一个简单的摩天大楼的电梯模型程序是以一座摩天大楼的多个电梯为背景,用线程、流程控制、随机函数等知识来模拟它。2、电梯的描述:...

热门文章

  1. Go Web编程--解析JSON请求和生成JSON响应
  2. 编程书说的“Go程序员应该让聚合类型的零值也具有意义”是在讲什么
  3. 基于Zookeeper实现简易版服务的注册与发现机制
  4. 总结几个字符串类的动态规划(最长公共子串,回文子串,子序列)
  5. 随笔 - 142 文章 - 0 评论 - 2294 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 权限管理...
  6. MySQL中GTID的几个限制和解决方案(r13笔记第21天)
  7. Innodb中的buffer poll和redo undo log
  8. [20150828]插入commit scn到记录.txt
  9. [转]Insert, Update, and Delete Destination table with SSIS
  10. Google Maps API 初级2