窗体移动一般有两种方法.怎样得到移动后的位置?不能用timer

解决方案 »

  1.   

     我就是想记录下窗体(不是最大化和最小化)的位置.不能用timer
      

  2.   

    窗体代码:Option ExplicitPrivate Sub Form_Load()
        prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
        SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
    End Sub
     
    Private Sub Form_Unload(Cancel As Integer)
        SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc
    End SubPrivate Sub Command1_Click()
        Me.Cls '清屏
    End Sub
    标准模块代码:Option ExplicitDeclare 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
    Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Public Const GWL_WNDPROC = (-4)
    Public prevWndProc     As Long                   '窗口程序地址
    Public Const WM_LBUTTONDOWN = &O201
        
    Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        On Error GoTo ms:
        Dim i As Long
        Dim j As Long
        
        If Msg = &H3 Then
            If hwnd = Form1.hwnd Then
                Form1.Print "Left:" & Form1.Left & "   Top:" & Form1.Top
            Else
                WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
            End If
        Else
            WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
        End If    Exit Function
    ms:
        MsgBox Err.Source & "-" & Err.Description
    End Function
      

  3.   

    不明确你的想法
    加一个按钮
    Private Sub Command1_Click()
         
        Label1.Caption = Form1.Top
        Label2.Caption =Form1.Left
        
    End Sub
    可以用标签的显示
      

  4.   

    你的窗体在哪个过程或函数里移动,就去哪里记录,不就行了。timer不能用,可以用多媒体定时吗?
      

  5.   

    谢谢BestBadGod的代码.问题完美解决了.也谢谢大家的回答.