A veces, necesitamos usar VB para desarrollar rápidamente un programa de procesamiento de dibujos de datos de prueba. Cambiar el cursor del mouse en el control de dibujo a la forma del cursor en cruz grande usado en el software AutoCAD logrará mejores resultados que el cursor de flecha normal. Entonces, ¿cómo implementamos un cursor en forma de cruz tan grande?
----Primero que nada, aclaremos el efecto que queremos lograr. Si dibujamos en un control Imagen, cuando el mouse se mueve a este control, el cursor del mouse cambia inmediatamente a una forma de cruz grande y la línea horizontal. el cursor cambia del control Desde el borde izquierdo al borde derecho, la línea vertical va desde el borde superior al borde inferior del control, es decir, el cursor en forma de cruz grande divide el control de dibujo en cuatro cuadrantes. Cuando el mouse se mueve fuera del control, el cursor vuelve a su forma original.
----Para implementar dicho cursor, tenemos que hacerlo nosotros mismos dibujando líneas. Si el mouse está en el control de dibujo, primero dibuje las líneas horizontales y verticales del cursor en la posición actual del mouse, cuando se mueva la posición del mouse, primero borre las líneas horizontales y verticales originales del cursor y luego dibuje las horizontales; líneas del cursor en la nueva posición Líneas y líneas verticales, entonces tenemos que responder al evento MouseMove del control de dibujo. Por supuesto, no importa qué contenido haya en el control de dibujo, no podemos destruir el contenido original cuando borramos la línea del cursor y volvemos a dibujar la línea del cursor. Por lo tanto, debemos configurar el DrawMode del control de dibujo en vbXorPen (modo XOR). dibuje la línea horizontal del cursor. Al agregar líneas verticales, use XOR para combinar las líneas horizontales y verticales. El color del píxel se establece en el valor XOR del color del cursor y el color del píxel original, y luego las líneas verticales y horizontales se dibujan en la misma posición usando el método XOR, y los píxeles en las líneas horizontales y verticales se dibujan nuevamente. Una operación XOR con el color del cursor borrará las líneas horizontales y verticales del cursor y restaurará el contenido original en el control de dibujo.
----También debemos asegurarnos de que cuando el mouse se mueve hacia el control de dibujo, el cursor normal del mouse desaparezca y solo aparezca el cursor en forma de cruz dibujado de gran tamaño. Por lo tanto, la propiedad MousePointer del control de dibujo también debe establecerse en vbCuntom, que. está definido por el usuario. Después de que la propiedad MousePointer del control de dibujo se establezca en vbCustom, los gráficos correspondientes definidos por el usuario deben cargarse en su propiedad MouseIcon. Porque esperamos que el control de dibujo solo tenga el cursor que dibujamos y ningún otro cursor, por lo que está vacío (. Transparente) gráficos del cursor. Puede encontrar un archivo de cursor, editarlo a través de cualquier editor de recursos, llenar todo el gráfico del cursor con transparencia y guardarlo como NoIcon.cur según necesitemos.
----A través de las configuraciones y operaciones clave anteriores, podemos realizar el cursor en cruz grande. Usando el método XOR para dibujar, también podemos lograr el efecto de "banda elástica" que se ve comúnmente en el software de dibujo general, es decir, después de usar el mouse para definir un punto, arrastre dinámicamente el mouse para definir otro punto durante el proceso de dinámicamente. arrastrando el mouse, el punto a dibujar es Los gráficos también cambian dinámicamente en consecuencia.
---- A continuación usamos un ejemplo para implementar completamente el cursor en forma de cruz grande en el control de dibujo y también demostramos cómo usar el efecto de "banda elástica" para dibujar un rectángulo:
----Cree un nuevo proyecto EXE estándar en VB, agregue un control de imagen a Form1 y establezca su nombre en PicDraw. Puede cargar un archivo de imagen. El tamaño de PicDraw y el tamaño de la imagen que contiene básicamente cubren la mayor parte. el Form1 es suficiente. El código de implementación es el siguiente. Este programa se ejecuta en VB5.0.
OpciónExplícito
PRivateOld_XAsSoltero
PrivadoViejo_YAssoltero
PrivadoisMouseDownAsBoolean
PrivateBox_X0AsSingle
PrivateBox_Y0AsSingle
PrivateBox_X1AsSingle
PrivateBox_Y1AsSingle
PrivatePenColorAsLong
PrivadoCrossColorAsLong
PrivadoSubForm_Load()
Color cruzado=QBColor(8)
ColorPluma=QBColor(15)
picDraw.DrawMode=vbXorPen
picDraw.MouseIcon=CargarImagen
(App.Path&"/no.cur")
picDraw.MousePointer=vbPersonalizado
isMouseDown=Falso
Caja_X0=Caja_X1=Caja_Y0=Caja_Y1=0
FinSub
PrivadoSubpicDraw_MouseDown
(BotónComoEntero,
ShiftAsInteger,XAsSingle,YAsSingle)
IfisMouseDown=TrueEntonces
'Previamente se ha definido un punto con el ratón
Cuadro_X1=X
Cuadro_Y1=Y
isMouseDown=Falso
picDraw.DrawMode=vbCopyPen
picDraw.Line(Box_X0,Box_Y0)-
(Cuadro_X1,Cuadro_Y1),
Color de pluma, B
picDraw.DrawMode=vbXorPen
'Dibuja un cursor
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CruzColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CruzColor
Antiguo_X=X
Antiguo_Y=Y
Demás
'Define el primer vértice de un rectángulo, luego borra el cursor
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CruzColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CruzColor
Cuadro_X0=X
Cuadro_Y0=Y
isMouseDown=Verdadero
Fin si
FinSub
PrivateSubpicDraw_MouseMove(ButtonAsInteger,
ShiftAsInteger,XAsSingle,YAsSingle)
IfisMouseDown=TrueEntonces
'Arrastra el ratón para definir otro vértice del rectángulo,
En este punto borre el rectángulo anterior y dibuje un nuevo rectángulo.
picDraw.Line(Box_X0,Box_Y0)-(Old_X,Old_Y),
Color de pluma, B
picDraw.Line(Box_X0,Box_Y0)-(X,Y),PenColor,B
Demás
'Borrar la antigua línea del cursor
picDraw.Line(0,Old_Y)-(picDraw.ScaleWidth,Old_Y),
CruzColor
picDraw.Line(Old_X,0)-(Old_X,picDraw.ScaleHeight),
CruzColor
'Dibuja una nueva línea de cursor
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CruzColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CruzColor
Fin si
Antiguo_X=X
Antiguo_Y=Y
FinSub->