Перемещение формы №2

Возможно для саморазвития я приведу практически два одинаковых примера перемещения формы.

Первый вариант с помощью API функций SendMessage и ReleaseCapture:

Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
                (ByVal hWnd As Integer, ByVal wMsg As Integer, _
                 ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
    ReleaseCapture()
    SendMessage(Me.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.FormBorderStyle = FormBorderStyle.None
End Sub

Слишком много кода, не правда ли?

Второй вариант, с помощью структуры Message, посылаем сообщение Windows:

Private Const WM_NCHITTEST As Integer = &H84
Private Const HTCAPTION = 2
Protected Overrides Sub WndProc(ByRef m As Message)
    If (m.Msg = WM_NCHITTEST) Then
        m.Result = IntPtr.op_Explicit(HTCAPTION)
    Else
        MyBase.WndProc(m)
    End If
End Sub

Дополнительно:

Функция SendMessage и функция ReleaseCapture.

  Метки:
  Евгений
  Просмотров: 2 249
  Запись опубликована в 19:41

Есть что сказать? Тогда действуй!


:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-o :-P :-D :-? :) :( :!: 8-O 8)