Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo implementar un cuadro de recorte en vb6 que se pueda cambiar de tamaño y mover con el mouse?

¿Cómo implementar un cuadro de recorte en vb6 que se pueda cambiar de tamaño y mover con el mouse?

Bueno, esta pregunta merece una calificación.

Si utiliza controles de terceros, puede implementar fácilmente estas funciones. Pero la operatividad no es tan conveniente como la de su propio código.

Para implementar esta función, en realidad se puede dividir en varias partes:

1. Dibuje un borde y seleccione un punto de acceso

2. donde está el clic del mouse Dónde está la función;

3. Una serie de acciones del mouse (hacer clic, arrastrar, etc.)

Entre ellas, dibujar no es difícil. Aquí hay algunas líneas de mi código que significan algo:

Dibuja un cuadro de selección de puntos

Spencer. ¿Estilo Dash? =? Dibujar 2D. Estilo de guión Dash

g.DrawRectangle(sPen, area. ?2, ?Area? ?g_BoxSpaceSize? *?2) Cambie el tipo de línea a una línea de puntos y dibuje un cuadrado. En cuanto al punto de selección del borde, también es muy sencillo. Simplemente establece las coordenadas y dibuja un cuadrado.

La verdadera parte central es la segunda. Debes registrar cada "elemento de imagen" dibujado.

Cuando el mouse hace clic, dibujo todas las primitivas en negro sobre un nuevo lienzo en blanco puro. Cuando dibujo un elemento gráfico, el punto donde se encuentra el mouse cambia de blanco a negro, indicando que ese punto está sobre ese elemento gráfico.

¿Privado? ¿Función? PointOnGE(ByVal?p?as?point,?opcional?ByVal?sinbox?as?boolean?=?false)? ¿Como? Entero

¿Atenuado? ¿do? ¿Como? ¿Nuevo? recolectar,? ¿Chk? ¿Como? Booleano,? ¿TC? ¿Como? Color

¿Aburrido? ¿I? ¿Como? Entero,? ¿Tmp? ¿Como? Elementos gráficos

Primero, elimine todos los elementos gráficos cubiertos.

¿Para qué? ¿I? =?GES. ¿Contar? ¿A dónde ir? 1? -1

¿Tmp? =?GES(一)

¿Y si? Tmp. ¿Seleccionado? Entonces qué. ¿Sin caja? Entonces

¿Chk? =?PointInBox(P, nuevo ?Rectangle(Tmp. Area. .Area?g_BoxSpaceSize?*?_

Tmp.?g_BoxSpaceSize? Chk? =?PointInBox(P, new?Rectangle(?Tmp.Area.X,?Tmp.Area.Y,?Tmp.Area.Width,?Tmp.Area.Height))

Fin? Si

¿Y si? ¿Chk? ¿Entonces qué? c. Anexo ㈠

Entonces

¿Y si? ¿Contar? =?0?¿Y entonces qué? ¿devolver? ¿No? No hay clic directo en la entidad.

Luego, comprueba si hay una entidad en el punto directo.

bg_buf. Graphics.Clear(m_BackColor)

¿Para qué? ¿I? =?1?¿Adónde ir? c. Contar

GES(C(I)). Draw(bg_buf.Graphics,?m_background color)

TC? =?GetGraColor(bg_buf.Graphics,?p)

¿Si? ¿No es así? (TC. r? =? m_BackColor. r? Entonces qué._

TC. g? =? m_BackColor. g? ¿Entonces qué?

_

TC. ¿b? =?m_BackColor. b)? ¿Entonces qué? ¿devolver? c(1)

Entonces

No hay ningún punto directo en la primitiva y regresa al nivel superior.

¿Volver? C(1)

¿Fin? Las definiciones de algunas funciones no están publicadas, pero puede consultar el significado general.

En cuanto al tercer punto, lo escribí poco a poco. Escribí cientos de líneas solo para este MouseDown.