Я искал в Интернете о том, как нарисовать прямоугольное отверстие на форме, и я нашел this хороший пример на языке Delphi, затем я попытался воспроизвести этот пример в VB.NET, до сих пор я добился успеха в рисовании прямоугольника в форме, но размеры этого прямоугольника не соответствуют реальному положению мыши на экране моего компьютера.Размеры прямоугольных отверстий не равны реальной позиции мыши на экране компьютера
А также относительно примера Delphi имели характеристики для адаптации функции ClientToScreen
к моему примеру, это, вероятно, может быть решением этой проблемы.
Кто-то может помочь мне с этим, пожалуйста?
Вот моя последняя попытка:
<DllImport("user32.dll")> _
Private Shared Function ClientToScreen(ByVal hWnd As IntPtr, ByRef lpPoint As Point) As Boolean
End Function
Dim mRect As Rectangle
Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown
mRect = New Rectangle(e.X, e.Y, 0, 0)
Me.Invalidate()
End Sub
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
Dim gp As New System.Drawing.Drawing2D.GraphicsPath
gp.AddRectangle(New Rectangle(0, 0, Me.Width, Me.Height))
mRect = New Rectangle(mRect.Left, mRect.Top, e.X - mRect.Left, e.Y - mRect.Top)
gp.AddRectangle(mRect)
Me.Region = New Region(gp)
Me.Invalidate()
End If
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Using pen As New Pen(Color.Red, 3)
e.Graphics.DrawRectangle(pen, mRect)
End Using
End Sub
Это производит следующее: result