本文介绍了我正在开发一个绘制简单点网格的应用程序。我希望鼠标在网格上的点之间捕捉,的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

I am working on an application which draws a simple dot grid. I would like the mouse to snap between the points on the grid, eventually to draw lines on the grid.

I have a method which takes in the current mouse location (X,Y) and calculates the nearest grid coordinate.

When I create an event and attempt to move the mouse to the new coordinate the whole system becomes jerky. The mouse doesn't snap smoothly between grid points.





i已经完成了一个点到另一个点,但我想将第一点捕捉到第二点同样像第二点到第三点但是如果我在那时做第二点到第三点forst指向第二点是删除。





代码:





i have done snaping one point to other point but i want to snap 1st point to second point same like second point to third point also but if i done second point to third point at that time forst point to second point is removing.


Code:

Imports System
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
    Public Const strApplicationTitle As String = "Snap Demo"
    Public frmSnap As Form1
    Public ptSnap, ptStart, ptEnd As Point
    Public Sub New()
        Me.Text = "Snap points"
        Me.ClientSize = New Size(800, 600)
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle
        Me.MaximizeBox = False
        Me.StartPosition = FormStartPosition.CenterScreen
        Me.DoubleBuffered = True
    End Sub
    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        MyBase.OnPaint(e)
        e.Graphics.Clear(Color.Black)
        For row As Integer = 20 To 780 Step 20
            For col As Integer = 20 To 580 Step 20
                e.Graphics.DrawEllipse(Pens.Blue, New Rectangle(row - 2, col - 2, 4, 4))
            Next
        Next
        e.Graphics.DrawLine(Pens.Red, ptStart, ptEnd)
    End Sub
    Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
        MyBase.OnMouseDown(e)
        Dim x As Integer = CInt(e.X / 20) * 20
        Dim y As Integer = CInt(e.Y / 20) * 20
        ptStart = New Point(x, y)
        ptSnap = New Point(x, y)
        Windows.Forms.Cursor.Position = Me.PointToScreen(ptSnap)
    End Sub
    Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
        MyBase.OnMouseMove(e)
        If e.Button = Windows.Forms.MouseButtons.Left Then
            Dim x As Integer = CInt(e.X / 20) * 20
            Dim y As Integer = CInt(e.Y / 20) * 20
            ' must be some delta away from original snap point
            If (x < ptSnap.X - 15 Or x > ptSnap.X + 15) Or (y < ptSnap.Y - 15 Or y > ptSnap.Y + 15) Then
                ptSnap = New Point(x, y)
                ptEnd = New Point(x, y)
                Me.Invalidate(False)
                Windows.Forms.Cursor.Position = Me.PointToScreen(ptSnap)
            End If
        End If
    End Sub


    Public Sub main()
        Try
            frmSnap = New Form1
            Application.Run(frmSnap)
        Catch ex As Exception
            MessageBox.Show(ex.Message, strApplicationTitle, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            frmSnap.Dispose()
        End Try
    End Sub
End Class

推荐答案


这篇关于我正在开发一个绘制简单点网格的应用程序。我希望鼠标在网格上的点之间捕捉,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 00:08