Parfois, nous devons utiliser VB pour développer rapidement un programme de traitement de dessin de données de test. Changer le curseur de la souris dans le contrôle de dessin sous la forme du grand curseur en croix utilisé dans le logiciel AutoCAD permettra d'obtenir de meilleurs résultats qu'un curseur fléché ordinaire. Alors, comment pouvons-nous implémenter un curseur croisé aussi grand ?
----Tout d'abord, clarifions l'effet que nous voulons obtenir. Si nous dessinons dans un contrôle Image, lorsque la souris se déplace vers ce contrôle, le curseur de la souris se transforme immédiatement en une grande croix et la ligne horizontale dans. le curseur passe de la bordure gauche à la bordure droite, la ligne verticale va de la bordure supérieure à la bordure inférieure du contrôle, c'est-à-dire que le grand curseur en croix divise le contrôle de dessin en quatre quadrants. Lorsque la souris sort du contrôle, le curseur reprend sa forme originale.
----Pour implémenter un tel curseur, nous devons le faire nous-mêmes en traçant des lignes. Si la souris est dans le contrôle de dessin, dessinez d'abord les lignes horizontales et verticales du curseur à la position actuelle de la souris lorsque la position de la souris se déplace, effacez d'abord les lignes horizontales et verticales d'origine du curseur, puis dessinez l'horizontale ; lignes du curseur à la nouvelle position Lignes et lignes verticales, nous devons alors répondre à l'événement MouseMove du contrôle de dessin. Bien sûr, quel que soit le contenu du contrôle de dessin, nous ne pouvons pas détruire le contenu original lorsque nous effaçons la ligne du curseur et redessinons la ligne du curseur. Par conséquent, nous devons définir le DrawMode du contrôle de dessin sur vbXorPen (mode XOR) pour. tracez la ligne horizontale du curseur Lorsque vous ajoutez des lignes verticales, utilisez XOR pour combiner les lignes horizontales et les lignes verticales. La couleur du pixel est définie sur la valeur XOR de la couleur du curseur et la couleur du pixel d'origine, puis les lignes verticales et horizontales sont dessinées à la même position à l'aide de la méthode XOR, et les pixels sur les lignes horizontales et verticales sont à nouveau dessinés. Une opération XOR avec la couleur du curseur effacera les lignes horizontales et verticales du curseur et restaurera le contenu original dans le contrôle de dessin.
----Nous devons également nous assurer que lorsque la souris se déplace dans le contrôle de dessin, le curseur de la souris ordinaire disparaît et que seul le grand curseur en forme de croix apparaît. Par conséquent, la propriété MousePointer du contrôle de dessin doit également être définie sur vbCuntom, ce qui est le cas. est défini par l'utilisateur. Une fois que la propriété MousePointer du contrôle de dessin est définie sur vbCustom, les graphiques définis par l'utilisateur correspondants doivent être chargés dans sa propriété MouseIcon car nous espérons que le contrôle de dessin n'aura que le curseur que nous dessinons et aucun autre curseur, donc un vide (. Graphiques de curseur transparents). Vous pouvez trouver un fichier de curseur, le modifier via n'importe quel éditeur de ressources, remplir l'intégralité du graphique du curseur avec de la transparence et l'enregistrer sous NoIcon.cur selon nos besoins.
----Grâce aux paramètres et opérations clés ci-dessus, nous pouvons réaliser le grand curseur croisé. En utilisant la méthode XOR pour le dessin, nous pouvons également obtenir l'effet « élastique » couramment observé dans les logiciels de dessin généraux, c'est-à-dire qu'après avoir utilisé la souris pour définir un point, faites glisser dynamiquement la souris pour définir un autre point pendant le processus de dessin dynamique. en faisant glisser la souris, le point à dessiner est Les graphiques changent également dynamiquement en conséquence.
---- Ci-dessous, nous utilisons un exemple pour implémenter entièrement le grand curseur en croix dans le contrôle de dessin, et montrons également comment utiliser l'effet « élastique » pour dessiner un rectangle :
----Créez un nouveau projet EXE standard dans VB, ajoutez un contrôle Image à Form1 et définissez son nom sur PicDraw. Vous pouvez charger un fichier image. La taille de PicDraw et la taille de l'image qu'il contient couvrent essentiellement la majeure partie. le Form1 suffit. Le code d'implémentation est le suivant. Ce programme fonctionne en VB5.0.
OptionExplicite
PRivateOld_XAsSingle
PrivéOld_YAsSingle
PrivateisMouseDownAsBoolean
PrivateBox_X0AsSingle
PrivateBox_Y0AsSingle
PrivateBox_X1AsSingle
PrivateBox_Y1AsSingle
PrivatePenColorAsLong
PrivateCrossColorAsLong
PrivateSubForm_Load()
CouleurCross=QBColor(8)
Couleur du stylo=QBCouleur(15)
picDraw.DrawMode=vbXorPen
picDraw.MouseIcon=LoadPicture
(App.Chemin&"/no.cur")
picDraw.MousePointer=vbCustom
isMouseDown=Faux
Boîte_X0=Boîte_X1=Boîte_Y0=Boîte_Y1=0
FinSub
PrivateSubpicDraw_MouseDown
(BoutonEntier,
ShiftAsInteger,XAsSingle,YAsSingle)
IfisMouseDown=TrueThen
'Un point a été préalablement défini avec la souris
Boîte_X1=X
Boîte_Y1=Y
isMouseDown=Faux
picDraw.DrawMode=vbCopyPen
picDraw.Line(Box_X0,Box_Y0)-
(Boîte_X1,Boîte_Y1),
Couleur du stylo, B
picDraw.DrawMode=vbXorPen
'Dessine un curseur
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CouleurCroisée
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CouleurCroisée
Ancien_X=X
Ancien_Y=Y
Autre
'Définit le premier sommet d'un rectangle, puis efface le curseur
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CouleurCroisée
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CouleurCroisée
Boîte_X0=X
Boîte_Y0=Y
isMouseDown=Vrai
FinSi
FinSub
PrivateSubpicDraw_MouseMove(ButtonAsInteger,
ShiftAsInteger,XAsSingle,YAsSingle)
IfisMouseDown=TrueThen
'Faites glisser la souris pour définir un autre sommet du rectangle,
À ce stade, effacez le rectangle précédent et dessinez un nouveau rectangle
picDraw.Line(Box_X0,Box_Y0)-(Old_X,Old_Y),
Couleur du stylo, B
picDraw.Line(Box_X0,Box_Y0)-(X,Y),PenColor,B
Autre
'Effacer l'ancienne ligne du curseur
picDraw.Line(0,Old_Y)-(picDraw.ScaleWidth,Old_Y),
CouleurCroisée
picDraw.Line(Old_X,0)-(Old_X,picDraw.ScaleHeight),
CouleurCroisée
'Dessiner une nouvelle ligne de curseur
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CouleurCroisée
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CouleurCroisée
FinSi
Ancien_X=X
Ancien_Y=Y
FinSub->