Cómo implementar un cuadro de recorte de imagen en vb6, cuyo tamaño se puede cambiar tirando de las esquinas y mover arrastrando y soltando con el mouse.
Bueno, esta pregunta es valiosa.
Si utiliza controles de terceros, puede implementar fácilmente estas funciones. Pero no es tan fácil como usar tu propio código.
Para lograr estas funciones, puedes dividirlo en varias partes:
1, dibujar el borde y seleccionar el punto de acceso
2, y aceptar; Función de la posición del punto del mouse;
3. Una serie de operaciones del mouse (hacer clic, arrastrar, etc.).
Para esta parte, en realidad no es tan difícil dibujar. Aquí hay algunas líneas de mi código para mostrar lo que esto significa: 'Dibujar un cuadro de selección discontinuo
sPen.DashStyle?=?Drawing2D.DashStyle.Dash
g.DrawRectangle(sPen , ?Area.X?-?g_BoxSpaceSize, ?Area.Y?-?g_BoxSpaceSize, ?Area.X?-?g_BoxSpaceSize, ?_
Area.Width?g_BoxSpaceSize?*?2)
Cambia el tipo de línea a línea de puntos y dibuja un cuadro cuadrado. En cuanto a seleccionar puntos para los bordes, también es fácil: simplemente establece las coordenadas y dibuja el cuadrado.
La verdadera carne y patatas están en la segunda parte, donde deberás realizar un seguimiento de cada "elemento" que dibujes.
Cuando el mouse hace clic, en realidad dibujo todas las primitivas en negro en un nuevo lienzo blanco. Cuando dibujo una determinada primitiva, el punto donde se encuentra el mouse cambia de blanco a negro. El punto está ubicado en esta primitiva.
PointOnGE(ByVal?P?As?Point,?Optional?ByVal?WithOutBox?As?Boolean?=?False)?As?Integer
Dim?C?As?New ?Collection, Chk?As?Boolean, TC?As?Color
Dim?I?As?Integer, Tmp?As?GraphElement
'Primero, elimine todos los elementos del gráfico superpuestos
Para?I?=?GES.Count?A 1 paso-1 Tmp =?GES(I) If?Tmp.Selected?Y?WithOutBox?Then
Chk?= ?PointInBox(P,?Nuevo?Rectángulo(Tmp.Area.X?-?g_ BoxSpaceSize,?_ Tmp.Area.Y?-?g_BoxSpaceSize,?_ Tmp.Area.Width? Tmp.Area.Height? ?g_BoxSpaceSize? *?2)) Else
Chk?=?PointInBox(P,?New?Rectangle(Tmp.Area.X,?Tmp.Area.Y,?Tmp .Area.Width Area.Y,? Tmp.Area.Width)) ¿Fin?Si?Chk?Entonces?C.Add(I)
Siguiente
Si?C.Cuenta?=?0?Entonces?Regresar. ?Ninguno?'No hay punto directo a la tupla
'Luego, verifique si hay un elemento gráfico apuntado directamente
bg_buf.Graphics.Clear(m_BackColor )
Para?I?=?1?A?C.Count GES(C(I)).Draw(bg_buf.Graphics,?m_BackColor)
TC?=?GetGraColor (bg_buf.Graphics,?P ) ¿Si?No?(TC.R?=?m_BackColor.R?Y?_ TC.G?=?m_BackColor.G?Y?_ TC.B?=?m_BackColor.B)?
Siguiente
'Sin punto directo en el elemento, volver al principio
¿Volver?
En cuanto al tercer punto, este Es un poco como regar, un poco como escribir. Escribí cientos de líneas solo para este MouseDown.