ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:21.35KB ,
资源ID:20792628      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20792628.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(磁性窗体 VBWord文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

磁性窗体 VBWord文档下载推荐.docx

1、Private Const PATCH_05 As Long = 93Private Const PATCH_08 As Long = 132Private Const PATCH_09 As Long = 137Private Type tSubData hwnd As Long nAddrSub As Long nAddrOrig As Long nMsgCntA As Long nMsgCntB As Long aMsgTblA() As Long aMsgTblB() As LongEnd TypePrivate sc_aSubData() As tSubDataPrivate sc_

2、aBuf(1 To CODE_LEN) As BytePrivate sc_pCWP As LongPrivate sc_pEbMode As LongPrivate sc_pSWL As LongPrivate Declare Sub RtlMoveMemory Lib kernel32 (Destination As Any, Source As Any, ByVal Length As Long)Private Declare Function GetModuleHandleA Lib (ByVal lpModuleName As String) As LongPrivate Decla

3、re Function GetProcAddress Lib (ByVal hModule As Long, ByVal lpProcName As String) As LongPrivate Declare Function GlobalAlloc Lib (ByVal wFlags As Long, ByVal dwBytes As Long) As LongPrivate Declare Function GlobalFree Lib (ByVal hmem As Long) As LongPrivate Declare Function SetWindowLongA Lib user

4、32 (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Declare Function VirtualProtect Lib (lpAddress As Any, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As LongPrivate Type POINTAPI x1 As Long Y1 As LongPrivate Type RECT2 x2 As Long Y2 As

5、 LongPrivate Const SPI_GETWORKAREA As Long = 48Private Const WM_SIZING As Long = &H214Private Const WM_MOVING As Long = &H216Private Const WM_ENTERSIZEMOVE As Long = &H231Private Const WM_EXITSIZEMOVE As Long = &H232Private Const WM_SYSCOMMAND As Long = &H112Private Const WM_COMMAND As Long = &H111P

6、rivate Const WMSZ_LEFT As Long = 1Private Const WMSZ_RIGHT As Long = 2Private Const WMSZ_TOP As Long = 3Private Const WMSZ_TOPLEFT As Long = 4Private Const WMSZ_TOPRIGHT As Long = 5Private Const WMSZ_BOTTOM As Long = 6Private Const WMSZ_BOTTOMLEFT As Long = 7Private Const WMSZ_BOTTOMRIGHT As Long =

7、8Private Const SC_MINIMIZE As Long = &HF020&Private Const SC_RESTORE As Long = &HF120&Private Const SWP_NOSIZE As Long = &H1Private Const SWP_NOZORDER As Long = &H4Private Const SWP_NOACTIVATE As Long = &H10Private Declare Function SystemParametersInfo Lib Alias SystemParametersInfoA (ByVal uAction

8、As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As LongPrivate Declare Function IsWindow Lib (ByVal hwnd As Long) As LongPrivate Declare Function IsZoomed Lib Private Declare Function BeginDeferWindowPos Lib (ByVal nNumWindows As Long) As LongPrivate Declare Function DeferWin

9、dowPos Lib (ByVal hWinPosInfo As Long, 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 LongPrivate Declare Function EndDeferWindowPos Lib (ByVal hWinPosInfo As Long) As LongPrivate Declare Function GetC

10、ursorPos Lib (lpPoint As POINTAPI) As LongPrivate Declare Function GetWindowRect Lib (ByVal hwnd As Long, lpRect As RECT2) As LongPrivate Declare Function OffsetRect Lib (lpRect As RECT2, ByVal X As Long, ByVal Y As Long) As LongPrivate Declare Function UnionRect Lib (lpDestRect As RECT2, lpSrc1Rect

11、 As RECT2, lpSrc2Rect As RECT2) As LongPrivate Declare Sub CopyMemory Lib RtlMoveMemory (pDest As Any, pSrc As Any, ByVal ByteLen As Long)Private Type WND_INFO hWndParent As Long Glue As BooleanPrivate Const LB_RECT As Long = 16Private m_uWndInfo() As WND_INFOPrivate m_lWndCount As LongPrivate m_rcW

12、nd() As RECT2Private m_ptAnchor As POINTAPIPrivate m_ptOffset As POINTAPIPrivate m_ptCurr As POINTAPIPrivate m_ptLast As POINTAPIPrivate m_lSnapWidth As LongPrivate Sub Class_Initialize() m_lSnapWidth = 10 默认吸引的宽度 ReDim m_uWndInfo(0) As WND_INFO 初始化包含窗口句柄的数组 m_lWndCount = 0End SubPrivate Sub Class_T

13、erminate() 停止Subclass If (m_lWndCount) Then Call Subclass_StopAll End IfPublic Sub zSubclass_Proc(ByVal bBefore As Boolean, ByRef bHandled As Boolean, ByRef lReturn As Long, ByRef lng_hWnd As Long, ByRef uMsg As Long, ByRef wParam As Long, ByRef lParam As Long) Dim rcWnd As RECT2 Dim lc As Long Sele

14、ct Case uMsg Case WM_ENTERSIZEMOVE 开始移动或改变大小 Call SystemParametersInfo(SPI_GETWORKAREA, 0, m_rcWnd(0), 0) 获得桌面区域 For lc = 1 To m_lWndCount 获得窗体句柄 If (IsZoomed(m_uWndInfo(lc).hwnd) Then 如果窗体最大化 Call CopyMemory(m_rcWnd(lc), m_rcWnd(0), LB_RECT) 获取工作区矩形 Else Call GetWindowRect(m_uWndInfo(lc).hwnd, m_rc

15、Wnd(lc) 获取窗体矩形 If (m_uWndInfo(lc).hwnd = lng_hWnd) Then 如果是当前的窗体获取偏移量 Call GetCursorPos(m_ptAnchor) Call GetCursorPos(m_ptLast) m_ptOffset.x1 = m_rcWnd(lc).x1 - m_ptLast.x1 m_ptOffset.Y1 = m_rcWnd(lc).Y1 - m_ptLast.Y1 Next lc改变大小 Case WM_SIZING Call CopyMemory(rcWnd, ByVal lParam, LB_RECT) Call pvSi

16、zeRect(lng_hWnd, rcWnd, wParam) Call CopyMemory(ByVal lParam, rcWnd, LB_RECT) bHandled = True lReturn = 1移动 Case WM_MOVING Call pvMoveRect(lng_hWnd, rcWnd)改变或移动大小结束 Case WM_EXITSIZEMOVE Call pvCheckGlueing特殊情况 菜单调用 Case WM_SYSCOMMAND If (wParam = SC_MINIMIZE Or wParam = SC_RESTORE) Then特殊情况 控件调用 Cas

17、e WM_COMMAND End SelectPublic Function AddWindow(ByVal hwnd As Long, Optional ByVal hWndParent As Long = 0) As Boolean For lc = 1 To m_lWndCount If (hwnd = m_uWndInfo(lc).hwnd) Then Exit Function If (IsWindow(hwnd) And (IsWindow(hWndParent) Or hWndParent = 0) Then 如果窗体有效 m_lWndCount = m_lWndCount +

18、1 增加数量 ReDim Preserve m_uWndInfo(0 To m_lWndCount) 调整数组大小 ReDim Preserve m_rcWnd(0 To m_lWndCount) With m_uWndInfo(m_lWndCount) 添加信息 .hwnd = hwnd .hWndParent = hWndParent End With Call pvCheckGlueing 粘合执行Subclass Call Subclass_Start(hwnd) Call Subclass_AddMsg(hwnd, WM_ENTERSIZEMOVE) Call Subclass_Ad

19、dMsg(hwnd, WM_SIZING, MSG_BEFORE) Call Subclass_AddMsg(hwnd, WM_MOVING, MSG_BEFORE) Call Subclass_AddMsg(hwnd, WM_EXITSIZEMOVE) Call Subclass_AddMsg(hwnd, WM_SYSCOMMAND) Call Subclass_AddMsg(hwnd, WM_COMMAND)执行成功 AddWindow = TrueEnd FunctionPublic Function RemoveWindow(ByVal hwnd As Long) As Boolean

20、 Dim lc1 As Long Dim lc2 As Long For lc1 = 1 To m_lWndCount If (hwnd = m_uWndInfo(lc1).hwnd) Then移动到下面 For lc2 = lc1 To m_lWndCount - 1 m_uWndInfo(lc2) = m_uWndInfo(lc2 + 1) Next lc2 m_lWndCount = m_lWndCount - 1 数量减一 ReDim Preserve m_uWndInfo(m_lWndCount) ReDim Preserve m_rcWnd(m_lWndCount)移动父 For

21、lc2 = 1 To m_lWndCount If (m_uWndInfo(lc2).hWndParent = hwnd) Then m_uWndInfo(lc2).hWndParent = 0 Call Subclass_Stop(hwnd) 停止Subclass检查粘合 RemoveWindow = True Exit For Next lc1Public Sub CheckGlueing()检查窗体所有可能的粘合Public Property Get SnapWidth() As Long SnapWidth = m_lSnapWidthEnd PropertyPublic Proper

22、ty Let SnapWidth(ByVal New_SnapWidth As Long) m_lSnapWidth = New_SnapWidthPrivate Sub pvSizeRect(ByVal hwnd As Long, rcWnd As RECT2, ByVal lfEdge As Long) Dim rcTmp As RECT2 Call CopyMemory(rcTmp, rcWnd, LB_RECT)检查所有的窗体 For lc = 0 To m_lWndCount With m_rcWnd(lc) If (m_uWndInfo(lc).hwnd hwnd) Then 如果

23、不是当前窗体X轴方向的粘合 If (rcWnd.Y1 .Y1 - m_lSnapWidth) Then Select Case lfEdge Case WMSZ_LEFT, WMSZ_TOPLEFT, WMSZ_BOTTOMLEFT Select Case True Case Abs(rcTmp.x1 - .x1) m_lSnapWidth: rcWnd.x1 = .x1 Case Abs(rcTmp.x1 - .x2) rcWnd.x1 = .x2 Case WMSZ_RIGHT, WMSZ_TOPRIGHT, WMSZ_BOTTOMRIGHT Case Abs(rcTmp.x2 - .x1

24、) rcWnd.x2 = .x1 Case Abs(rcTmp.x2 - .x2) rcWnd.x2 = .x2Y轴方向的粘合 If (rcWnd.x1 .x1 - m_lSnapWidth) Then Case WMSZ_TOP, WMSZ_TOPLEFT, WMSZ_TOPRIGHT Case Abs(rcTmp.Y1 - .Y1) rcWnd.Y1 = .Y1 Case Abs(rcTmp.Y1 - .Y2) rcWnd.Y1 = .Y2 Case WMSZ_BOTTOM, WMSZ_BOTTOMLEFT, WMSZ_BOTTOMRIGHT Case Abs(rcTmp.Y2 - .Y1

25、) rcWnd.Y2 = .Y1 Case Abs(rcTmp.Y2 - .Y2) rcWnd.Y2 = .Y2Private Sub pvMoveRect(ByVal hwnd As Long, rcWnd As RECT2) Dim lWId As Long Dim lOffx As Long Dim lOffy As Long Dim hDWP As Long Call GetCursorPos(m_ptCurr) 获取当前鼠标位置检查当前窗体的可粘合性移动当前窗体 Call OffsetRect(rcWnd, (m_ptCurr.x1 - rcWnd.x1) + m_ptOffset.x1, 0) Call OffsetRect(rcWnd, 0, (m_ptCurr.Y1 - rcWnd.Y1) + m_ptOffset.Y1) For lc1 = 0 To m_lWndCount If (m_uWndInfo(lc1).hwnd 如果不是当前的窗体 If (m_uWndInfo(lc1).Glue = False Or m_uWndInfo(lc1).hWn

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1