Public Class Form1 Private Const HTCAPTION As Integer = 2 Private Const HTLEFT As Integer = 10 Private Const HTRIGHT As Integer = 11 Private Const HTTOP As Integer = 12 Private Const HTTOPLEFT As Integer = 13 Private Const HTTOPRIGHT As Integer = 14 Private Const HTBOTTOM As Integer = 15 Private Const HTBOTTOMLEFT As Integer = 16 Private Const HTBOTTOMRIGHT As Integer = 17 Private Const WM_NCHITTEST As Integer = &H84 Private Const WM_NCLBUTTONDOWN As Integer = &HA1 Private Const resizeBorder As Integer = 5 Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If m.Msg = WM_NCHITTEST Then Dim pt As New Point(m.LParam.ToInt32) pt = Me.PointToClient(pt) If pt.X < resizeBorder AndAlso pt.Y < resizeBorder Then m.Result = New IntPtr(HTTOPLEFT) ElseIf pt.X > (Me.Width - resizeBorder) AndAlso pt.Y < resizeBorder Then m.Result = New IntPtr(HTTOPRIGHT) ElseIf pt.Y < resizeBorder Then m.Result = New IntPtr(HTTOP) ElseIf pt.X < resizeBorder AndAlso pt.Y > (Me.Height - resizeBorder) Then m.Result = New IntPtr(HTBOTTOMLEFT) ElseIf pt.X > (Me.Width - resizeBorder) AndAlso pt.Y > (Me.Height - resizeBorder) Then m.Result = New IntPtr(HTBOTTOMRIGHT) ElseIf pt.Y > (Me.Height - resizeBorder) Then m.Result = New IntPtr(HTBOTTOM) ElseIf pt.X < resizeBorder Then m.Result = New IntPtr(HTLEFT) ElseIf pt.X > (Me.Width - resizeBorder) Then m.Result = New IntPtr(HTRIGHT) Else MyBase.WndProc(m) End If Else MyBase.WndProc(m) End If End Sub Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseDown If e.Y <= 32 Then Me.Capture = False WndProc(Message.Create(Me.Handle, WM_NCLBUTTONDOWN, IntPtr.op_Explicit(HTCAPTION), IntPtr.Zero)) End If End Sub Private Sub Form1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Me.Paint e.Graphics.FillRectangle(Brushes.Black, 0, 0, Me.Width, 32) End Sub End Class
Počet zobrazení stránky
2011-04-22
Move and Resize without formborder
Přihlásit se k odběru:
Komentáře k příspěvku (Atom)
Žádné komentáře:
Okomentovat