Иногда нам нужно использовать VB для быстрой разработки программы обработки рисунков тестовых данных. Изменение курсора мыши в элементе управления рисованием на форму большого крестообразного курсора, используемого в программном обеспечении AutoCAD, позволит достичь лучших результатов, чем обычный курсор-стрелка. Так как же нам реализовать такой большой перекрестный курсор?
----Прежде всего, давайте уточним эффект, которого мы хотим добиться. Если мы рисуем элемент управления «Рисунок», то при перемещении мыши к этому элементу управления курсор мыши сразу же принимает форму большого креста, а в нем появляется горизонтальная линия. курсор меняется с элемента управления. От левой границы к правой границе вертикальная линия идет от верхней границы к нижней границе элемента управления, то есть большой перекрестный курсор делит элемент управления рисованием на четыре квадранта. Когда мышь выходит за пределы элемента управления, курсор возвращается к исходной форме.
----Чтобы реализовать такой курсор, нам придется сделать это самим, рисуя линии. Если мышь находится в элементе управления рисованием, сначала нарисуйте горизонтальную и вертикальную линии курсора в текущем положении мыши, когда положение мыши перемещается, сначала сотрите исходные горизонтальную и вертикальную линии курсора, а затем нарисуйте горизонтальные; линии курсора в новом положении. Линии и вертикальные линии, то мы должны реагировать на событие MouseMove элемента управления рисованием. Конечно, независимо от того, какое содержимое находится в элементе управления рисованием, мы не можем уничтожить исходное содержимое, когда стираем линию курсора и перерисовываем ее. Поэтому нам необходимо установить для параметра DrawMode элемента управления рисованием значение vbXorPen (режим XOR). нарисуйте горизонтальную линию курсора. При добавлении вертикальных линий используйте XOR для объединения горизонтальных и вертикальных линий. Цвет пикселя устанавливается равным значению XOR цвета курсора и исходного цвета пикселя, затем вертикальные и горизонтальные линии рисуются в одной и той же позиции с использованием метода XOR, а пиксели на горизонтальных и вертикальных линиях рисуются снова. Операция XOR с цветом курсора сотрет горизонтальные и вертикальные линии курсора и восстановит исходное содержимое элемента управления рисованием.
----Мы также должны гарантировать, что при перемещении мыши в элемент управления рисованием обычный курсор мыши исчезает и появляется только большой нарисованный крестовый курсор. Поэтому для свойства MousePointer элемента управления рисованием также должно быть установлено значение vbCuntom, что соответствует значению vbCuntom. определяется пользователем. После того, как для свойства MousePointer элемента управления рисованием установлено значение vbCustom, соответствующая пользовательская графика должна быть загружена в его свойство MouseIcon, поскольку мы надеемся, что элемент управления рисованием будет иметь только тот курсор, который мы рисуем, и никаких других курсоров, поэтому пустой (. Прозрачная) графика курсора. Вы можете найти файл курсора, отредактировать его через любой редактор ресурсов, заполнить прозрачностью всю картинку курсора и сохранить его как NoIcon.cur, как нам нужно.
----С помощью вышеуказанных ключевых настроек и операций мы можем реализовать большой перекрестный курсор. Используя метод XOR для рисования, мы также можем добиться эффекта «резиновой ленты», обычно наблюдаемого в обычном программном обеспечении для рисования, то есть после использования мыши для определения точки динамически перетаскивать мышь, чтобы определить другую точку. перетаскивая мышь, точка, которую нужно нарисовать. Графика также соответствующим образом динамически изменяется.
---- Ниже мы используем пример для полной реализации большого крестообразного курсора в элементе управления рисованием, а также демонстрируем, как использовать эффект «резиновой ленты» для рисования прямоугольника:
---- Создайте новый стандартный проект EXE в VB, добавьте элемент управления Picture в Form1 и установите для него имя PicDraw. Вы можете загрузить файл изображения. Размер PicDraw и размер изображения в нем в основном охватывают большую часть. Form1 достаточно. Код реализации следующий. Эта программа работает в VB5.0.
OptionExplicit
PRivateOld_XAsSingle
PrivateOld_YAsSingle
PrivateisMouseDownAsBoolean
PrivateBox_X0AsSingle
PrivateBox_Y0AsSingle
PrivateBox_X1AsSingle
PrivateBox_Y1AsSingle
ЧастныйРучкаЦветКакДлинный
ЧастныйКрестЦветAsLong
PrivateSubForm_Load()
CrossColor=QBЦвет(8)
PenColor=QBЦвет(15)
picDraw.DrawMode=vbXorPen
picDraw.MouseIcon=LoadPicture
(App.Path&"/no.cur")
picDraw.MousePointer=vbCustom
isMouseDown = Ложь
Box_X0=Box_X1=Box_Y0=Box_Y1=0
EndSub
PrivateSubpicDraw_MouseDown
(КнопкаAsInteger,
ShiftAsInteger, XAsSingle, YAsSingle)
IfisMouseDown=TrueThen
'Точка была предварительно определена с помощью мыши
Box_X1=X
Box_Y1=Y
isMouseDown = Ложь
picDraw.DrawMode=vbCopyPen
picDraw.Line(Box_X0,Box_Y0)-
(Коробка_X1,Коробка_Y1),
Цвет пера,B
picDraw.DrawMode=vbXorPen
'Нарисовать курсор
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
КрестЦвет
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
КрестЦвет
Старый_X=X
Старый_Y=Y
Еще
'Определяет первую вершину прямоугольника, затем стирает курсор
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
КрестЦвет
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
КрестЦвет
Box_X0=X
Box_Y0=Y
isMouseDown = Истина
КонецЕсли
EndSub
PrivateSubpicDraw_MouseMove (ButtonAsInteger,
ShiftAsInteger, XAsSingle, YAsSingle)
IfisMouseDown=TrueThen
'Перетащите указатель мыши, чтобы определить другую вершину прямоугольника,
На этом этапе сотрите предыдущий прямоугольник и нарисуйте новый прямоугольник.
picDraw.Line(Box_X0,Box_Y0)-(Old_X,Old_Y),
Цвет пера,B
picDraw.Line(Box_X0,Box_Y0)-(X,Y),PenColor,B
Еще
'Стираем старую строку курсора
picDraw.Line(0,Old_Y)-(picDraw.ScaleWidth,Old_Y),
КрестЦвет
picDraw.Line(Old_X,0)-(Old_X,picDraw.ScaleHeight),
КрестЦвет
'Рисуем новую линию курсора
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
КрестЦвет
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
КрестЦвет
КонецЕсли
Старый_X=X
Старый_Y=Y
EndSub->