Manchmal müssen wir VB verwenden, um schnell ein Programm zur Verarbeitung von Testdatenzeichnungen zu entwickeln. Durch Ändern des Mauszeigers in der Zeichnungssteuerung in die Form des großen Kreuzcursors, der in der AutoCAD-Software verwendet wird, werden bessere Ergebnisse erzielt als mit dem normalen Pfeilcursor. Wie implementieren wir also einen so großen Kreuzcursor?
----Lassen Sie uns zunächst den Effekt klären, den wir erzielen möchten. Wenn wir ein Bildsteuerelement zeichnen, ändert sich der Mauszeiger sofort in die Form eines großen Kreuzes und die horizontale Linie wird angezeigt Der Cursor wechselt vom linken zum rechten Rand des Steuerelements. Die vertikale Linie verläuft vom oberen zum unteren Rand des Steuerelements. Das heißt, der große Kreuzcursor unterteilt das Zeichensteuerelement in vier Quadranten. Wenn sich die Maus außerhalb des Steuerelements bewegt, kehrt der Cursor in seine ursprüngliche Form zurück.
----Um einen solchen Cursor zu implementieren, müssen wir es selbst tun, indem wir Linien zeichnen. Wenn sich die Maus im Zeichensteuerelement befindet, zeichnen Sie zuerst die horizontalen und vertikalen Linien des Cursors an der aktuellen Position der Maus. Wenn sich die Mausposition bewegt, löschen Sie zuerst die ursprünglichen horizontalen und vertikalen Linien des Cursors und zeichnen Sie dann die horizontalen Linien des Cursors an der neuen Position Linien und vertikale Linien, dann müssen wir auf das MouseMove-Ereignis des Zeichensteuerelements reagieren. Unabhängig vom Inhalt des Zeichensteuerelements können wir den ursprünglichen Inhalt natürlich nicht zerstören, wenn wir die Cursorlinie löschen und die Cursorlinie neu zeichnen. Daher müssen wir den DrawMode des Zeichensteuerelements auf vbXorPen (XOR-Modus) setzen Zeichnen Sie die horizontale Linie des Cursors. Wenn Sie vertikale Linien hinzufügen, kombinieren Sie die horizontalen und vertikalen Linien mit XOR. Die Pixelfarbe wird auf den XOR-Wert der Cursorfarbe und der ursprünglichen Pixelfarbe gesetzt. Anschließend werden die vertikalen und horizontalen Linien mithilfe der XOR-Methode an derselben Position gezeichnet und die Pixel auf den horizontalen und vertikalen Linien werden erneut gezeichnet. Eine XOR-Operation mit der Cursorfarbe löscht die horizontalen und vertikalen Linien des Cursors und stellt den ursprünglichen Inhalt im Zeichensteuerelement wieder her.
----Wir müssen auch sicherstellen, dass beim Bewegen der Maus in das Zeichensteuerelement der normale Mauszeiger verschwindet und nur der große gezeichnete Kreuzcursor angezeigt wird. Daher sollte die MousePointer-Eigenschaft des Zeichensteuerelements ebenfalls auf vbCuntom gesetzt werden ist benutzerdefiniert. Nachdem die MousePointer-Eigenschaft des Zeichensteuerelements auf vbCustom gesetzt wurde, sollten die entsprechenden benutzerdefinierten Grafiken in seine MouseIcon-Eigenschaft geladen werden. Da wir hoffen, dass das Zeichensteuerelement nur den Cursor hat, den wir zeichnen, und keine anderen Cursor, also ein leeres (. Transparente) Cursorgrafiken. Sie können eine Cursordatei finden, sie mit einem beliebigen Ressourceneditor bearbeiten, die gesamte Cursorgrafik transparent ausfüllen und sie als die von uns benötigte NoIcon.cur speichern.
----Durch die oben genannten Schlüsseleinstellungen und -vorgänge können wir den großen Kreuzcursor realisieren. Mit der XOR-Methode zum Zeichnen können wir auch den in allgemeiner Zeichensoftware üblichen „Gummiband“-Effekt erzielen, d Durch Ziehen mit der Maus wird der zu zeichnende Punkt angezeigt. Die Grafik ändert sich entsprechend auch dynamisch.
---- Im Folgenden verwenden wir ein Beispiel, um den großen Kreuzcursor vollständig im Zeichensteuerelement zu implementieren, und demonstrieren außerdem, wie der „Gummiband“-Effekt zum Zeichnen eines Rechtecks verwendet wird:
----Erstellen Sie ein neues Standard-EXE-Projekt in VB, fügen Sie ein Bildsteuerelement zu Form1 hinzu und legen Sie dessen Namen auf PicDraw fest. Die Größe von PicDraw und die Größe des darin enthaltenen Bildes decken im Wesentlichen ab der Form1 reicht aus. Der Implementierungscode lautet wie folgt. Dieses Programm läuft in VB5.0.
OptionExplicit
PRivateOld_XAsSingle
PrivateOld_YAsSingle
PrivateisMouseDownAsBoolean
PrivateBox_X0AsSingle
PrivateBox_Y0AsSingle
PrivateBox_X1AsSingle
PrivateBox_Y1AsSingle
PrivatePenColorAsLong
PrivateCrossColorAsLong
PrivateSubForm_Load()
CrossColor=QBColor(8)
PenColor=QBColor(15)
picDraw.DrawMode=vbXorPen
picDraw.MouseIcon=Bild laden
(App.Path&"/no.cur")
picDraw.MousePointer=vbCustom
isMouseDown=False
Box_X0=Box_X1=Box_Y0=Box_Y1=0
EndSub
PrivateSubpicDraw_MouseDown
(ButtonAsInteger,
ShiftAsInteger,XAsSingle,YAsSingle)
IfisMouseDown=TrueThen
'Ein Punkt wurde zuvor mit der Maus definiert
Box_X1=X
Box_Y1=Y
isMouseDown=False
picDraw.DrawMode=vbCopyPen
picDraw.Line(Box_X0,Box_Y0)-
(Box_X1,Box_Y1),
PenColor,B
picDraw.DrawMode=vbXorPen
„Zeichnen Sie einen Cursor
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CrossColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CrossColor
Alt_X=X
Alt_Y=Y
Anders
'Definiert den ersten Scheitelpunkt eines Rechtecks und löscht dann den Cursor
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CrossColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CrossColor
Box_X0=X
Box_Y0=Y
isMouseDown=True
EndIf
EndSub
PrivateSubpicDraw_MouseMove(ButtonAsInteger,
ShiftAsInteger,XAsSingle,YAsSingle)
IfisMouseDown=TrueThen
„Ziehen Sie die Maus, um einen anderen Scheitelpunkt des Rechtecks zu definieren.
Löschen Sie an dieser Stelle das vorherige Rechteck und zeichnen Sie ein neues Rechteck
picDraw.Line(Box_X0,Box_Y0)-(Old_X,Old_Y),
PenColor,B
picDraw.Line(Box_X0,Box_Y0)-(X,Y),PenColor,B
Anders
'Löschen Sie die alte Cursorzeile
picDraw.Line(0,Old_Y)-(picDraw.ScaleWidth,Old_Y),
CrossColor
picDraw.Line(Old_X,0)-(Old_X,picDraw.ScaleHeight),
CrossColor
'Zeichnen Sie eine neue Cursorlinie
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CrossColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CrossColor
EndIf
Alt_X=X
Alt_Y=Y
EndSub->