Использование событий мыши (windows forms .net)

Координаты: clientX/Y, pageX/Y

Все события мыши имеют координаты двух видов:

  1. Относительно окна: и .
  2. Относительно документа: и .

Например, если у нас есть окно размером 500×500, и курсор мыши находится в левом верхнем углу, то значения и равны . А если мышь находится в центре окна, то значения и равны независимо от того, в каком месте документа она находится и до какого места документ прокручен. В этом они похожи на .

Наведите курсор мыши на поле ввода, чтобы увидеть (пример находится в , поэтому координаты определяются относительно этого ):

Координаты относительно документа , отсчитываются не от окна, а от левого верхнего угла документа. Подробнее о координатах вы можете узнать в главе Координаты.

Поля

GotMouseCaptureEvent

Идентифицирует присоединенное событие GotMouseCapture.

LostMouseCaptureEvent

Идентифицирует присоединенное событие LostMouseCapture.

MouseDownEvent

Идентифицирует присоединенное событие MouseDown.

MouseEnterEvent

Идентифицирует присоединенное событие MouseEnter.

MouseLeaveEvent

Идентифицирует присоединенное событие MouseLeave.

MouseMoveEvent

Идентифицирует присоединенное событие MouseMove.

MouseUpEvent

Идентифицирует присоединенное событие MouseUp.

MouseWheelDeltaForOneLine

Представляет число единиц, на которые поворачивается колесико мыши для прокрутки на одну строку.

MouseWheelEvent

Идентифицирует присоединенное событие MouseWheel.

PreviewMouseDownEvent

Идентифицирует присоединенное событие PreviewMouseDown.

PreviewMouseDownOutsideCapturedElementEvent

Идентифицирует присоединенное событие PreviewMouseDownOutsideCapturedElement.

PreviewMouseMoveEvent

Идентифицирует присоединенное событие PreviewMouseMove.

PreviewMouseUpEvent

Идентифицирует присоединенное событие PreviewMouseUp.

PreviewMouseUpOutsideCapturedElementEvent

Идентифицирует присоединенное событие PreviewMouseUpOutsideCapturedElement.

PreviewMouseWheelEvent

Идентифицирует присоединенное событие PreviewMouseWheel.

QueryCursorEvent

Идентифицирует присоединенное событие QueryCursor.

Описание функций-членов

QCursor::QCursor ( shape )

Создаёт курсор с указанной формой shape.

Список форм смотрите в .

QCursor::QCursor ( const QBitmap & bitmap, const QBitmap & mask, int hotX = -1, int hotY = -1 )

Создаёт пользовательский курсор, основанный на битовом изображении.

bitmap и mask составляют битовое изображение. hotX и hotY определяют горячую точку курсора.

Если hotX отрицательный, то он устанавливается в bitmap().width()/2. Если hotY отрицательный, то он устанавливается в bitmap().height()/2.

Биты переменных bitmap (B) и mask (M) объединяются следующим образом:

  • B=1 и M=1 дают черный цвет.
  • B=0 и M=1 дают белый цвет.
  • B=0 и M=0 дают прозрачность.
  • B=1 и M=0 дают результат исключающего ИЛИ под Windows и неопределённый результат в других операционных системах.

Используйте глобальный цвет из библиотеки Qt для рисования 0-пикселов и для рисования 1-пикселов в битовых изображениях.

Допустимые размеры курсора зависят от аппаратных средств дисплея (или базовой оконной системой). Мы рекомендуем использовать размер курсора 32 x 32, потому что этот размер поддерживается всеми платформами. Некоторые платформы также поддерживают размеры 16 x 16, 48 x 48, и 64 x 64.

Замечание: В Windows CE размеры курсора фиксированы. Если растровое изображение курсора больше, чем определённое в системе, то оно масштабируется.

QCursor::QCursor ( const QPixmap & pixmap, int hotX = -1, int hotY = -1 )

Создаёт пользовательский курсор, основанный на растровом изображении.

pixmap — это изображение. Оно обычно использует маску (устанавливается при помощи ()). hotX и hotY определяют горячую точку курсора.

Если hotX отрицательный, то он устанавливается в pixmap().width()/2. Если hotY отрицательный, то он устанавливается в pixmap().height()/2.

Допустимые размеры курсора зависят от аппаратных средств дисплея (или базовой оконной системой). Мы рекомендуем использовать размер курсора 32 x 32, потому что этот размер поддерживается всеми платформами. Некоторые платформы также поддерживают размеры 16 x 16, 48 x 48, и 64 x 64.

Замечание: В Windows CE размеры курсора фиксированы. Если растровое изображение курсора больше, чем определённое в системе, то оно масштабируется.

Создаёт курсор Qt, основанный на курсоре cursor в формате Windows.

Внимание: Эта функция доступна только в Windows

QCursor::QCursor ( handle )

Создаёт курсор Qt, основанный на заданном дескрипторе handle.

Внимание: Эта функция доступна только на X11

HCURSOR_or_HANDLE QCursor::handle () const

Возвращает платформо-зависимый дескриптор курсора. Тип HCURSOR_or_HANDLE является типом HCURSOR в Windows и типом в X11 и Mac OS X. В Qt для встраиваемых Linux-систем это тип integer.

Внимание: Использование значения, возвращаемого этой функцией, не является переносимым

QPixmap QCursor::pixmap () const

Возвращает растровое изображение курсора. Эта функция работает только в том случае, если текущий курсор определён растровым изображением.

QPoint QCursor::pos ()

Возвращает позицию курсора (горячей точки) в глобальных координатах экрана.

Вы можете воспользоваться () для их перевода в координаты виджета.

void QCursor::setPos ( int x, int y )

Перемещает курсор (горячую точку) в глобальную экранную позицию (x, y).

Вы можете вызвать () для перевода координат виджета в глобальные координаты экрана.

Это перегруженная функция.

Перемещает курсор (горячую точку) в глобальных координатах экрана в точку p.

void QCursor::setShape ( shape )

Устанавливает форму курсора в форму shape.

Список форм курсора смотрите в .

Методы

Добавляет обработчик для вложенного события GotMouseCapture.

Добавляет обработчик для вложенного события LostMouseCapture.

Добавляет обработчик для вложенного события MouseDown.

Добавляет обработчик для вложенного события MouseEnter.

Добавляет обработчик для вложенного события MouseLeave.

Добавляет обработчик для вложенного события MouseMove.

Добавляет обработчик для вложенного события MouseUp.

Добавляет обработчик для вложенного события MouseWheel.

Добавляет обработчик для вложенного события PreviewMouseDown.

Добавляет обработчик для вложенного события PreviewMouseDownOutsideCapturedElement.

Добавляет обработчик для вложенного события PreviewMouseMove.

Добавляет обработчик для вложенного события PreviewMouseUp.

Добавляет обработчик для вложенного события PreviewMouseUpOutsideCapturedElement.

Добавляет обработчик для вложенного события PreviewMouseWheel.

Добавляет обработчик для вложенного события QueryCursor.

Захватывает ввод мыши в указанный элемент.

Захватывает ввод мыши в указанный элемент, используя заданный режим CaptureMode.

Извлекает до 64 предыдущих координат указателя мыши с момента последнего события перемещения мыши.

Получает позицию указателя мыши относительно заданного элемента.

Удаляет обработчик для вложенного события GotMouseCapture.

Удаляет обработчик для вложенного события LostMouseCapture.

Удаляет обработчик для вложенного события MouseDown.

Удаляет обработчик для вложенного события MouseEnter.

Удаляет обработчик для вложенного события MouseLeave.

Удаляет обработчик для вложенного события MouseMove.

Удаляет обработчик для вложенного события MouseUp.

Удаляет обработчик для вложенного события MouseWheel.

Удаляет обработчик для вложенного события PreviewMouseDown.

Удаляет обработчик для вложенного события PreviewMouseDownOutsideCapturedElement.

Удаляет обработчик для вложенного события PreviewMouseMove.

Удаляет обработчик для вложенного события PreviewMouseUp.

Удаляет обработчик для вложенного события PreviewMouseUpOutsideCapturedElement.

Удаляет обработчик для вложенного события PreviewMouseWheel.

Удаляет обработчик для вложенного события QueryCursor.

Присваивает указатель мыши заданному Cursor.

Вызывает принудительную повторную синхронизацию мыши.

Вызывает принудительное обновление курсора мыши.

Присоединенные события

GotMouseCapture

Происходит при захвате мыши элементом.

LostMouseCapture

Происходит, когда элемент теряет захват мыши.

MouseDown

Происходит, когда пользователь отпускает любую кнопку мыши.

MouseEnter

Происходит, когда указатель мыши входит в границы элемента.

MouseLeave

Происходит, когда указатель мыши покидает границы элемента.

MouseMove

Происходит, когда указатель мыши перемещается.

MouseUp

Происходит при отпускании любой кнопки мыши.

MouseWheel

Происходит при повороте колесика мыши.

PreviewMouseDown

Происходит, когда пользователь отпускает любую кнопку мыши.

PreviewMouseDownOutsideCapturedElement

Происходит при нажатии главной кнопки мыши, когда указатель находится вне элемента, захватывающего события мыши.

PreviewMouseMove

Происходит, когда указатель мыши перемещается над элементом.

PreviewMouseUp

Происходит при отпускании любой кнопки мыши.

PreviewMouseUpOutsideCapturedElement

Происходит при отпускании главной кнопки мыши, когда указатель находится вне элемента, захватывающего события мыши.

PreviewMouseWheel

Происходит при повороте колесика мыши.

QueryCursor

Происходит, когда элемент запрашивает текущий указатель мыши.

Комментарии

MouseКласс предоставляет связанные с мышью события, методы и свойства, которые предоставляют сведения о состоянии мыши.

Каждое событие, Mouse определяющее как вложенное событие, также повторно предоставляется классами базовых элементов UIElement и ContentElement как новое перенаправленное событие. Как правило, более удобно управлять событиями мыши для приложения в UIElement и ContentElement , а не с помощью Mouse событий. Дополнительные сведения см. в разделе Общие сведения о входных данных.

Статические члены Mouse класса делегируют первичному MouseDevice потоку диспетчер входных данных вызывающего потока.

Сведения о мыши

Объект MouseEventArgs отправляется обработчикам событий мыши, связанных с нажатием кнопки мыши и отслеживанием ее движений. Объект MouseEventArgs предоставляет сведения о текущем состоянии мыши, включая положение указателя мыши в клиентских координатах, какие кнопки мыши нажаты и произошла ли прокрутка колесика мыши. Некоторые события мыши, например те, которые просто уведомляют о том, что указатель мыши пересек границы элемента управления, отправляют обработчику событий объект EventArgs без подробных сведений.

Если нужно знать текущее состояние кнопок мыши или положение ее указателя, но при этом избежать обработки события мыши, можно также использовать свойства MouseButtons и MousePosition класса Control. Свойство MouseButtons возвращает сведения о том, какие кнопки мыши в настоящее время нажаты. Свойство MousePosition возвращает экранные координаты указателя мыши, которые эквивалентны значению, возвращаемому методом Position.

Модификаторы: shift, alt, ctrl и meta

Все события мыши включают в себя информацию о нажатых клавишах-модификаторах.

Свойства объекта события:

  • : Shift
  • : Alt (или Opt для Mac)
  • : Ctrl
  • : Cmd для Mac

Они равны , если во время события была нажата соответствующая клавиша.

Например, кнопка внизу работает только при комбинации Alt+Shift+клик:

Внимание: обычно на Mac используется клавиша вместо

Не забывайте про мобильные устройства

Комбинации клавиш на клавиатуре – это хорошее дополнение к рабочему процессу. Если у пользователя есть клавиатура – они работают. Ну а если на его устройстве её нет – должен быть другой способ сделать то же самое.

Отключаем выделение

Двойной клик мыши имеет побочный эффект, который может быть неудобен в некоторых интерфейсах: он выделяет текст.

Например, двойной клик на текст ниже выделяет его в дополнение к нашему обработчику:

Если зажать левую кнопку мыши и, не отпуская кнопку, провести мышью, то также будет выделение, которое в интерфейсах может быть «не кстати».

Есть несколько способов запретить выделение, о которых вы можете прочитать в главе Selection и Range.

В данном случае самым разумным будет отменить действие браузера по умолчанию при событии , это отменит оба этих выделения:

Теперь выделенный жирным элемент не выделяется при двойном клике, а также на нём нельзя начать выделение, зажав кнопку мыши.

Заметим, что текст внутри него по-прежнему можно выделить, если начать выделение не на самом тексте, а до него или после. Обычно это нормально воспринимается пользователями.

Предотвращение копирования

Если мы хотим отключить выделение для защиты содержимого страницы от копирования, то мы можем использовать другое событие: .

Если вы попытаетесь скопировать текст в , у вас это не получится, потому что срабатывание события по умолчанию запрещено.

Конечно, пользователь имеет доступ к HTML-коду страницы и может взять текст оттуда, но не все знают, как это сделать.

Стандартное поведение события щелчка

Если требуется обрабатывать события щелчка мыши в определенном порядке, необходимо знать порядок, в котором вызываются события щелчка в элементах управления Windows Forms. Когда кнопка мыши (любая) нажимается и отпускается, все элементы управления Windows Forms, кроме отмеченных в списке ниже, вызывают события щелчка в одном и том же порядке. Ниже приведен порядок событий, вызываемых одинарным щелчком мыши.

  1. СобытиеMouseDown .

  2. СобытиеClick .

  3. СобытиеMouseClick .

  4. СобытиеMouseUp .

Ниже приведен порядок событий, вызываемых двойным щелчком мыши.

  1. СобытиеMouseDown .

  2. СобытиеClick .

  3. СобытиеMouseClick .

  4. СобытиеMouseUp .

  5. СобытиеMouseDown .

  6. СобытиеDoubleClick . (Может изменяться в зависимости от того, установлено ли для бита стиля элемента управления значение . Подробнее о настройке бита ControlStyles см. в разделе, посвященном методу SetStyle.)

  7. СобытиеMouseDoubleClick .

  8. СобытиеMouseUp .

пример кода, демонстрирующий порядок событий щелчка мыши, см. в разделе как управлять событиями пользовательского ввода в Windows Forms элементах управления.

Особые элементы управления

Поведение перечисленных ниже элементов управления при щелчке мыши не соответствует стандартному.

  • Примечание

    Если пользователь щелкает поле редактирования, кнопку или элемент в списке, то для элемента управления ComboBox возникают описанные ниже события.

    • Щелчок левой кнопкой мыши: Click, MouseClick

    • Щелчок правой кнопкой мыши: событие щелчка не вызывается

    • Двойной щелчок левой кнопкой мыши: Click, MouseClick; Click, MouseClick

    • Двойной щелчок правой кнопкой мыши: событие щелчка не вызывается

  • Элементы управления TextBox, RichTextBox, ListBox, MaskedTextBox и CheckedListBox

    Примечание

    Если пользователь щелкает любое место внутри этих элементов управления, то возникают описанные ниже события.

    • Щелчок левой кнопкой мыши: Click, MouseClick

    • Щелчок правой кнопкой мыши: событие щелчка не вызывается

    • Двойной щелчок левой кнопкой мыши: Click, MouseClick, DoubleClick, MouseDoubleClick

    • Двойной щелчок правой кнопкой мыши: событие щелчка не вызывается

  • Элемент управления ListView

    Примечание

    Указанные ниже события возникают только в том случае, если пользователь щелкает элементы в ListView. Если пользователь щелкает мышью в любом другом месте элемента управления, то события не вызываются. В дополнение к событиям, описанным ниже, существуют события BeforeLabelEdit и AfterLabelEdit, которые могут представлять интерес, если нужно выполнять проверку с помощью элемента управления ListView.

    • Щелчок левой кнопкой мыши: Click, MouseClick

    • Щелчок правой кнопкой мыши: Click, MouseClick

    • Двойной щелчок левой кнопкой мыши: Click, MouseClick; DoubleClick, MouseDoubleClick

    • Двойной щелчок правой кнопкой мыши: Click, MouseClick; DoubleClick, MouseDoubleClick

  • Элемент управления TreeView

    Примечание

    Указанные ниже события возникают только в том случае, если пользователь щелкает сами элементы или справа от них в элементе управления TreeView. Если пользователь щелкает мышью в любом другом месте элемента управления, то события не вызываются. В дополнение к событиям, описанным ниже, существуют события BeforeCheck, BeforeSelect, BeforeLabelEdit, AfterSelect, AfterCheck и AfterLabelEdit, которые могут представлять интерес, если нужно выполнять проверку с помощью элемента управления TreeView.

    • Щелчок левой кнопкой мыши: Click, MouseClick

    • Щелчок правой кнопкой мыши: Click, MouseClick

    • Двойной щелчок левой кнопкой мыши: Click, MouseClick; DoubleClick, MouseDoubleClick

    • Двойной щелчок правой кнопкой мыши: Click, MouseClick; DoubleClick, MouseDoubleClick

Поведение отрисовки для переключателей

Переключатели, такие как элементы управления, производные от класса ButtonBase, имеют описанное ниже нестандартное поведение отрисовки в сочетании с событиями щелчка.

  1. Пользователь нажимает кнопку мыши.

  2. Элемент управления отрисовывается в состоянии «нажато».

  3. Возникает событие MouseDown.

  4. Пользователь отпускает кнопку мыши.

  5. Элемент управления отрисовывается в состоянии «отпущено».

  6. Возникает событие Click.

  7. Возникает событие MouseClick.

  8. Возникает событие MouseUp.

    Примечание

    Если пользователь перемещает указатель за границы переключателя при нажатой кнопке мыши (например, перемещает указатель мыши за границы элемента управления Button, когда он нажат), переключатель будет отрисовываться в состоянии «отпущено» и происходит только событие MouseUp. События Click и MouseClick в этой ситуации не наступают.

Подробное описание

Класс QCursor предоставляет курсор мыши произвольной формы.

Этот класс в основном используется для связывания особых форм курсора с определёнными виджетами, а также для установки или получения позиции курсора мыши.

Qt имеет некоторое количество стандартных форм курсоров, но вы можете сделать пользовательскую форму курсора, основанную на QBitmap, маске и горячей точке.

Для того, чтобы связать курсор с виджетом, используйте (). Для того, чтобы связать курсор со всеми виджетами (обычно требуется на короткий промежуток времени), используйте ().

Для того, чтобы установить форму курсора, используйте () или конструктор класса QCursor, который принимает форму курсора как аргумент, или же вы можете использовать один из курсоров, определённых в перечислении .

Если вы хотите создать курсор с вашим собственным битовым изображением, то вы можете либо использовать конструктор QCursor, который принимает битовое изображение и маску, либо конструктор, который принимает растровое изображение.

Для того, чтобы установить или получить позицию курсора мыши, используйте статические методы () и ().

Примечание: Возможно создать QCursor до QApplication, но это бесполезно, за исключением заготовки для реального QCursor, создаваемого после QApplication. Попытка использовать QCursor, созданный до QApplication, приведёт к ошибке.

Примечания для пользователей X11

На X11 Qt поддерживает библиотеку Xcursor, которая позволяет использовать полноцветные темы пиктограмм. Таблица ниже показывает имена курсоров, связанных с каждым значением перечисления . Если курсор не может быть найден при использовании указанного ниже имени, то вместо этого будет использован стандартный курсор X11. Замечание: X11 не предоставляет курсоров для всех возможных значений перечисления . Возможно, некоторые курсоры будут взяты из темы Xcursor, в то время как другие будут использовать внутренний битовый курсор.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: