如何知道窗口被拖动了.

cdc2533802 2003-09-27 10:11:59
如何知道窗口被拖动了.
...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunfeng007 2003-10-16
  • 打赏
  • 举报
回复
例子
增加窗体form1、form2;模块modules
在模块中

Option Explicit

Public Const GWL_WNDPROC = (-4)
Public Const WM_MOVE = &H3
Public Const WM_SIZE = &H5

Public Declare Function CallWindowProc Lib "user32" 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 Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Global lproc As Long


Function DialogProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'该函数为Form的窗口处理函数。


Select Case uMsg

Case WM_MOVE
Form2.Move Form1.Left, Form1.Top + Form1.Height

Case WM_SIZE
Form2.Move Form1.Left, Form1.Top + Form1.Height

Case Else
DialogProc = CallWindowProc(lproc, hwnd, uMsg, wParam, lParam)
End Select
End Function

sub Main()
form1.show
end sub

'--------------------------------------------------------------------
在form1中
Option Explicit

Private Sub Form_Load()
Form2.Show
lproc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf DialogProc)
End Sub
cdc2533802 2003-10-16
  • 打赏
  • 举报
回复
楼上的能不能说清楚一点什么意思
tanta 2003-10-16
  • 打赏
  • 举报
回复
简单的办法:
窗体上加一定时器,时间设定为你的响应时间

Dim x As Long
Dim y As Long

Private Sub Form_Load()
x = Me.Left
y = Me.Top
End Sub

Private Sub Timer1_Timer()
If x <> Me.Left Or y <> Me.Top Then
Print "MOVE!"
End If

End Sub
射天狼 2003-09-27
  • 打赏
  • 举报
回复
加一个定时器控件,然后检查窗口的位置,不过这不是最好的方法,比较占资源.
最好的方法是拦截窗口消息!~~
yl97121 2003-09-27
  • 打赏
  • 举报
回复
自己看啊~~嘿嘿
Jackile 2003-09-27
  • 打赏
  • 举报
回复
加一个Flag!用movewindow试试,或者就要考虑用hook了
demo001 2003-09-27
  • 打赏
  • 举报
回复
用API函数拦截
cdc2533802 2003-09-27
  • 打赏
  • 举报
回复
不有更好的方法吗
拦截窗口消息怎么作.

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧