События мыши – Устанавливает обработчик возвращения кнопки мыши в ненажатое состояние, либо, запускает это событие.

События мыши в формах Windows Forms

  • Время чтения: 7 мин

В этой статье

При обработке ввода данных с помощью мыши обычно необходимо знать положение указателя и состояние кнопок мыши.When you handle mouse input, you usually want to know the location of the mouse pointer and the state of the mouse buttons. В этом разделе приводится подробная информация о получении этих сведений из событий мыши и описывается порядок, в котором вызываются события щелчка мыши в элементах управления Windows Forms.This topic provides details on how to get this information from mouse events, and explains the order in which mouse click events are raised in Windows Forms controls. Список и описание всех событий мыши см. в разделе как работает ввод с помощью мыши в Windows Forms.For a list and description of all of the mouse events, see How Mouse Input Works in Windows Forms. См. также обзор обработчиков событий (Windows Forms) и Общие сведения о событиях (Windows Forms).Also see Event Handlers Overview (Windows Forms) and Events Overview (Windows Forms).

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

Объект MouseEventArgs отправляется обработчикам событий мыши, связанных с нажатием кнопки мыши и отслеживанием ее движений.A MouseEventArgs is sent to the handlers of mouse events related to clicking a mouse button and tracking mouse movements. MouseEventArgs предоставляет сведения о текущем состоянии мыши, включая расположение указателя мыши в координатах клиента, нажатые кнопки мыши и то, прокручивается ли колесико мыши.MouseEventArgs provides information about the current state of the mouse, including the location of the mouse pointer in client coordinates, which mouse buttons are pressed, and whether the mouse wheel has scrolled. Некоторые события мыши, например те, которые просто уведомляют о том, что указатель мыши пересек границы элемента управления, отправляют обработчику событий объект EventArgs без подробных сведений.Several mouse events, such as those that simply notify when the mouse pointer has entered or left the bounds of a control, send an EventArgs to the event handler with no further information.

Если нужно знать текущее состояние кнопок мыши или положение ее указателя, но при этом избежать обработки события мыши, можно также использовать свойства MouseButtons и MousePosition класса Control.If you want to know the current state of the mouse buttons or the location of the mouse pointer, and you want to avoid handling a mouse event, you can also use the MouseButtons and MousePosition properties of the Control class. MouseButtons возвращает сведения о том, какие кнопки мыши в данный момент нажаты.MouseButtons returns information about which mouse buttons are currently pressed. Свойство MousePosition возвращает экранные координаты указателя мыши, которые эквивалентны значению, возвращаемому методом Position.The MousePosition returns the screen coordinates of the mouse pointer and is equivalent to the value returned by Position.

Преобразование между экранными и клиентскими координатамиConverting Between Screen and Client Coordinates

Так как некоторые сведения о положении мыши представлены в клиентских координатах, а другие — в экранных, может потребоваться преобразовать точку из одной системы координат в другую.Because some mouse location information is in client coordinates and some is in screen coordinates, you may need to convert a point from one coordinate system to the other. Это легко сделать с помощью методов PointToClient и PointToScreen, доступных в классе Control.You can do this easily by using the PointToClient and PointToScreen methods available on the Control class.

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

Если требуется обрабатывать события щелчка мыши в определенном порядке, необходимо знать порядок, в котором вызываются события щелчка в элементах управления Windows Forms.If you want to handle mouse click events in the proper order, you need to know the order in which click events are raised in Windows Forms controls. Когда кнопка мыши (любая) нажимается и отпускается, все элементы управления Windows Forms, кроме отмеченных в списке ниже, вызывают события щелчка в одном и том же порядке.All Windows Forms controls raise click events in the same order when a mouse button is pressed and released (regardless of which mouse button), except where noted in the following list for individual controls. Ниже приведен порядок событий, вызываемых одинарным щелчком мыши.The following list shows the order of events raised for a single mouse-button click:

  1. СобытиеMouseDown .MouseDown event.

  2. СобытиеClick .Click event.

  3. СобытиеMouseClick .MouseClick event.

  4. СобытиеMouseUp .MouseUp event.

Ниже приведен порядок событий, вызванных нажатием кнопки мыши двойным щелчком.The following is the order of events raised for a double mouse-button click:

  1. СобытиеMouseDown .MouseDown event.

  2. СобытиеClick .Click event.

  3. СобытиеMouseClick .MouseClick event.

  4. СобытиеMouseUp .MouseUp event.

  5. СобытиеMouseDown .MouseDown event.

  6. СобытиеDoubleClick .DoubleClick event. (Может изменяться в зависимости от того, установлено ли для бита стиля StandardDoubleClick элемента управления значение true.(This can vary, depending on whether the control in question has the StandardDoubleClick style bit set to true. Подробнее о настройке бита ControlStyles см. в разделе, посвященном методу SetStyle.)For more information about how to set a ControlStyles bit, see the SetStyle method.)

  7. СобытиеMouseDoubleClick .MouseDoubleClick event.

  8. СобытиеMouseUp .MouseUp event.

Пример кода, демонстрирующий порядок событий щелчка мыши, см. в разделе как управлять событиями пользовательского ввода в Windows Forms элементах управления.For a code example that demonstrates the order of the mouse click events, see How to: Handle User Input Events in Windows Forms Controls.

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

Поведение перечисленных ниже элементов управления при щелчке мыши не соответствует стандартному.The following controls do not conform to the standard mouse click event behavior:

  • Button

  • CheckBox

  • ComboBox

  • RadioButton

    Примечание

    Если пользователь щелкает поле редактирования, кнопку или элемент в списке, то для элемента управления ComboBox возникают описанные ниже события.For the ComboBox control, the event behavior detailed later occurs if the user clicks on the edit field, the button, or on an item within the list.

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

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

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

    • Двойной щелчок правой кнопкой мыши: событие щелчка не вызываетсяRight double-click: No click events raised

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

    Примечание

    Если пользователь щелкает любое место внутри этих элементов управления, то возникают описанные ниже события.The event behavior detailed later occurs when the user clicks anywhere within these controls.

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

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

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

    • Двойной щелчок правой кнопкой мыши: событие щелчка не вызываетсяRight double-click: No click events raised

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

    Примечание

    Указанные ниже события возникают только в том случае, если пользователь щелкает элементы в ListView.The event behavior detailed later occurs only when the user clicks on the items in the ListView control. Если пользователь щелкает мышью в любом другом месте элемента управления, то события не вызываются.No events are raised for clicks anywhere else on the control. В дополнение к событиям, описанным ниже, существуют события BeforeLabelEdit и AfterLabelEdit, которые могут представлять интерес, если нужно выполнять проверку с помощью элемента управления ListView.In addition to the events described later, there are the BeforeLabelEdit and AfterLabelEdit events, which may be of interest to you if you want to use validation with the ListView control.

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

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

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

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

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

    Примечание

    Указанные ниже события возникают только в том случае, если пользователь щелкает сами элементы или справа от них в элементе управления TreeView.The event behavior detailed later occurs only when the user clicks on the items themselves or to the right of the items in the TreeView control. Если пользователь щелкает мышью в любом другом месте элемента управления, то события не вызываются.No events are raised for clicks anywhere else on the control. В дополнение к событиям, описанным ниже, существуют события BeforeCheck, BeforeSelect, BeforeLabelEdit, AfterSelect, AfterCheck и AfterLabelEdit, которые могут представлять интерес, если нужно выполнять проверку с помощью элемента управления TreeView.In addition to those described later, there are the BeforeCheck, BeforeSelect, BeforeLabelEdit, AfterSelect, AfterCheck, and AfterLabelEdit events, which may be of interest to you if you want to use validation with the TreeView control.

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

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

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

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

Поведение рисования переключателейPainting behavior of toggle controls

Переключатели, такие как элементы управления, производные от класса ButtonBase, имеют описанное ниже нестандартное поведение отрисовки в сочетании с событиями щелчка.Toggle controls, such as the controls deriving from the ButtonBase class, have the following distinctive painting behavior in combination with mouse click events:

  1. Пользователь нажимает кнопку мыши.The user presses the mouse button.

  2. Элемент управления отрисовывается в состоянии "нажато".The control paints in the pressed state.

  3. Возникает событие MouseDown.The MouseDown event is raised.

  4. Пользователь отпускает кнопку мыши.The user releases the mouse button.

  5. Элемент управления отрисовывается в состоянии "отпущено".The control paints in the raised state.

  6. Возникает событие Click.The Click event is raised.

  7. Возникает событие MouseClick.The MouseClick event is raised.

  8. Возникает событие MouseUp.The MouseUp event is raised.

    Примечание

    Если пользователь перемещает указатель за границы переключателя при нажатой кнопке мыши (например, перемещает указатель мыши за границы элемента управления Button, когда он нажат), переключатель будет отрисовываться в состоянии "отпущено" и происходит только событие MouseUp.If the user moves the pointer out of the toggle control while the mouse button is down (such as moving the mouse off the Button control while it is pressed), the toggle control will paint in the raised state and only the MouseUp event occurs. События Click и MouseClick в этой ситуации не наступают.The Click or MouseClick events will not occur in this situation.

См. также:See also

Глава 8. - Четыре основных события мыши

Глава 8. - Четыре основных события мыши

Четыре основных события мыши

Приложение Windows Forms получает сведения об активности мыши в виде событий. Класс Control определяет 9 событий мыши и 9 соответствующих защищенных методов. Все классы, порожденные от Control (включая Form), также наследуют эти 9 методов.

Хотя мы подробно обсудим элементы управления в главе 12, полезно было бы иметь какое-то представление о принципах взаимодействия мыши с элементами управления уже сейчас. Представьте себе форму или диалоговое окно с множеством кнопок, текстовых меток и полей. Эти элементы управления считаются дочерними объектами формы, а форма — их родительским объектом (предком). Мы уже встречались с такой нотацией в программе SysInfoPanel из главы 4, когда в свойство Parent элемента управления Panel заносился объект Form.

Любое событие мыши может быть получено только одним элементом управления. Элемент управления получает события мыши, только когда он активизирован (включен) и видим, т.е. его свойства Enabled и Visible равны true. Обычно события мыши получает только элемент управления, находящийся прямо под курсором мыши.

Если провести курсор над дочерним элементом управления, который активизирован и видим, то событие мыши получит именно этот дочерний объект, а не его родительский объект. Если дочерний элемент управления деактивизирован (отключен) или невидим, то событие мыши получает его родительский объект. При этом все происходит так, как если бы дочерний объект был прозрачным. Если несколько элементов расположены «стопкой» в одной и той же физической точке, то событие мыши достанется активизированному и видимому элементу управления, занимающему высшую позицию в Z-порядке (первому сверху в «стопке»), иначе говоря, тому, что будет виден сверху всех перекрывающихся элементов управления. С этим мы разберемся в главе 12.

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

Однако, как я еще покажу, иногда элемент управления или форма получает события мыши, даже если курсор мыши не расположен над ним. Эта функция называется захват (capturing) мыши и помогает формам и элементам управления отслеживать движения мыши. Ниже я еще много буду говорить об этом.

Вот четыре основных события мыши:

События Control (выборочно)



Событие Метод Делегат Аргумент

MouseDown OnMouseDown MouseEventHandler MouseEventArgs
MouseUp OnMouseUp MouseEventHandler MouseEventArgs
MouseMove OnMouseMove MouseEventHandler MouseEventArgs
MouseWheel OnMouseWheel MouseEventHandler MouseEventArgs

Как можно догадаться по их именам, события MouseDown и MouseUp говорят о том, что кнопка мыши нажата или отпущена. MouseMove сигнализирует о движении мыши, a MouseWheel происходит при вращении колесика мыши.

Только эти четыре события связаны с объектами типа MouseEventArgs. У класса MouseEventArgs пять неизменяемых свойств:

Свойства MouseEventArgs



Тип Свойство Доступ Описание

int X Чтение Позиция мыши по горизонтали
int Y Чтение Позиция мыши по вертикали
MouseButtons Button Чтение Кнопка (или кнопки) мыши
int Clicks Чтение В случае двойного щелчка возвращает 2
int Delta Чтение Вращение колесика мыши

X и Y — целочисленные значения, указывающие координаты горячей точки курсора, исчисляемые в пикселах относительно верхнего левого угла клиентской области. Эта пара свойств действительна для всех четырех событий мыши.

Свойство Button указывает кнопку или кнопки, участвующие в данном событии. Это свойство не действительно для событий MouseWheel. В свойство Button заносится одно из значений перечисления MouseButtons:

Перечисление MouseButtons



Член Значение

None 0x00000000
Left 0x00100000
Right 0x00200000
Middle 0x00400000
XButton1 0x00800000
XButton2 0x01000000

В этом перечислении Left следует понимать как главную кнопку, заданную пользователем, т.е. кнопку, которая вызывает меню приложений и позволяет изменять размеры форм и перемещать их. Свойство Right указывает кнопку, вызывающую контекстное меню. XButton1 и XButton2 — это кнопки мыши IntelliMouse Explorer, у которой пять кнопок.

Для событий MouseDown и MouseUp свойство Button указывает, какая именно кнопка нажата или отпущена.

Для события MouseMove свойство Button указывает кнопку или кнопки, нажатые в текущий момент. Заметьте, что значениями этих свойств являются битовые флаги, которые можно комбинировать. Скажем, если нажаты одновременно левая и правая кнопки мыши, то значение свойства Button равно 0x00300000. Для объекта MouseEventArgs с именем mea следующее выражение вернет true, если нажата только правая кнопка мыши, и никаких других:


  (mea.Button == MouseButtons.Right)

А это выражение всегда будет равно true, если нажата правая кнопка мыши, невзирая на другие кнопки:


  (mea.Button & MouseButtons.Right != 0)

Свойство Clicks действительно лишь для событий MouseDown и обычно равно 1. Значение свойства равно 2, если за одним событием MouseDown достаточно быстро следует другое такое же, чтобы эта пара событий была квалифицирована как двойной щелчок.

Свойство Delta действительно лишь для событий MouseWheel. Если повернуть колесико мыши на один щелчок вперед, свойство Delta в типичном случае станет равно 120, а если на один щелчок назад, то ему будет присвоено –120.



Сайт управляется системой uCoz

Осуществление ввода мышью в Windows Forms

  • Время чтения: 8 мин

В этой статье

Получение и обработка ввода с мыши является важной частью каждое приложение Windows.Receiving and handling mouse input is an important part of every Windows application. Можно обработать события мыши для выполнения действий в приложении, или использовать сведения о расположении мыши для проверки нажатия или других действий.You can handle mouse events to perform an action in your application, or use mouse location information to perform hit testing or other actions. Кроме того можно изменить способ, элементы управления в приложении обрабатывать ввод от мыши.In addition, you can change the way the controls in your application handle mouse input. В этом разделе описываются события мыши в подробности, а также как получать и изменять параметры системы для мыши.This topic describes these mouse events in detail, and how to obtain and change system settings for the mouse. Дополнительные сведения о данных, передаваемых с помощью мыши вызываются события и порядок, в котором события щелчка мыши, см. в разделе события мыши в Windows Forms.For more information about the data provided with the mouse events and the order in which the mouse click events are raised, see Mouse Events in Windows Forms.

Положение указателя мыши и попаданияMouse Location and Hit-Testing

Когда пользователь перемещает мышь, операционная система перемещает указатель мыши.When the user moves the mouse, the operating system moves the mouse pointer. Указатель содержит один пиксель, называется активной точкой, которой операционная система отслеживает и распознает как положения указателя.The mouse pointer contains a single pixel, called the hot spot, which the operating system tracks and recognizes as the position of the pointer. Когда пользователь перемещает мышь или нажимает кнопку мыши, Control , содержащий HotSpot вызывает соответствующее событие мыши.When the user moves the mouse or presses a mouse button, the Control that contains the HotSpot raises the appropriate mouse event. Вы можете получить текущее положение мыши с Location свойство MouseEventArgs при обработке события мыши или с помощью Position свойство Cursor класса.You can obtain the current mouse position with the Location property of the MouseEventArgs when handling a mouse event or by using the Position property of the Cursor class. Можно впоследствии использовать сведения о расположении мыши для проверки нажатия и затем выполнить действие на основе расположения указателя мыши.You can subsequently use mouse location information to perform hit-testing, and then perform an action based on the location of the mouse. Проверка нажатия возможности встроены некоторые элементы управления Windows Forms такие как ListView, TreeView, MonthCalendar и DataGridView элементов управления.Hit-testing capability is built in to several controls in Windows Forms such as the ListView, TreeView, MonthCalendar and DataGridView controls. Используется с соответствующее событие мыши, MouseHover к примеру, попадания очень полезен для определения, когда приложение должно выполнить определенное действие.Used with the appropriate mouse event, MouseHover for example, hit-testing is very useful for determining when your application should perform a specific action.

События мышиMouse Events

Для обработки событий мыши является основным способом реагировать на ввод с помощью мыши.The primary way to respond to mouse input is to handle mouse events. В следующей таблице перечислены события мыши и описывает, когда они вызываются.The following table shows the mouse events and describes when they are raised.

Событие мышиMouse Event ОписаниеDescription
Click Это событие происходит при отпускании кнопки мыши, обычно перед MouseUp событий.This event occurs when the mouse button is released, typically before the MouseUp event. Обработчик этого события принимает аргумент типа EventArgs.The handler for this event receives an argument of type EventArgs. Обработайте это событие, когда нужно только определить, когда происходит щелчок.Handle this event when you only need to determine when a click occurs.
MouseClick Это событие происходит, когда пользователь щелкает мышью элемент управления.This event occurs when the user clicks the control with the mouse. Обработчик этого события принимает аргумент типа MouseEventArgs.The handler for this event receives an argument of type MouseEventArgs. Обработайте это событие, когда требуется получить сведения о мыши, когда происходит щелчок.Handle this event when you need to get information about the mouse when a click occurs.
DoubleClick Это событие возникает при двойном щелчке элемента управления.This event occurs when the control is double-clicked. Обработчик этого события принимает аргумент типа EventArgs.The handler for this event receives an argument of type EventArgs. Обработайте это событие, когда нужно только определить, когда происходит двойной щелчок.Handle this event when you only need to determine when a double-click occurs.
MouseDoubleClick Это событие происходит, когда пользователь дважды щелкает мышью элемент управления.This event occurs when the user double-clicks the control with the mouse. Обработчик этого события принимает аргумент типа MouseEventArgs.The handler for this event receives an argument of type MouseEventArgs. Обработайте это событие, когда требуется получить сведения о мыши, когда происходит двойной щелчок.Handle this event when you need to get information about the mouse when a double-click occurs.
MouseDown Это событие происходит, когда указатель мыши находится над элементом управления, и пользователь нажимает кнопку мыши.This event occurs when the mouse pointer is over the control and the user presses a mouse button. Обработчик этого события принимает аргумент типа MouseEventArgs.The handler for this event receives an argument of type MouseEventArgs.
MouseEnter Это событие происходит, когда указатель мыши пересекает границы или клиентскую область элемента управления, в зависимости от типа элемента управления.This event occurs when the mouse pointer enters the border or client area of the control, depending on the type of control. Обработчик этого события принимает аргумент типа EventArgs.The handler for this event receives an argument of type EventArgs.
MouseHover Это событие происходит, когда указатель мыши останавливается и над элементом управления.This event occurs when the mouse pointer stops and rests over the control. Обработчик этого события принимает аргумент типа EventArgs.The handler for this event receives an argument of type EventArgs.
MouseLeave Это событие происходит, когда указатель мыши покидает границы или клиентскую область элемента управления, в зависимости от типа элемента управления.This event occurs when the mouse pointer leaves the border or client area of the control, depending on the type of the control. Обработчик этого события принимает аргумент типа EventArgs.The handler for this event receives an argument of type EventArgs.
MouseMove Это событие возникает при перемещении указателя мыши, когда оно находится над элементом управления.This event occurs when the mouse pointer moves while it is over a control. Обработчик этого события принимает аргумент типа MouseEventArgs.The handler for this event receives an argument of type MouseEventArgs.
MouseUp Это событие происходит, когда указатель мыши находится над элементом управления и пользователь отпускается кнопку мыши.This event occurs when the mouse pointer is over the control and the user releases a mouse button. Обработчик этого события принимает аргумент типа MouseEventArgs.The handler for this event receives an argument of type MouseEventArgs.
MouseWheel Это событие происходит при вращении колесика мыши, когда элемент управления имеет фокус.This event occurs when the user rotates the mouse wheel while the control has focus. Обработчик этого события принимает аргумент типа MouseEventArgs.The handler for this event receives an argument of type MouseEventArgs. Можно использовать Delta свойство MouseEventArgs для определения того, насколько прокручена мышь.You can use the Delta property of MouseEventArgs to determine how far the mouse has scrolled.

Изменение ввода мыши и определение системных параметровChanging Mouse Input and Detecting System Settings

Можно определить и изменить способ, элемент управления обрабатывает ввод от мыши путем создания производного элемента управления и использования GetStyle и SetStyle методы.You can detect and change the way a control handles mouse input by deriving from the control and using the GetStyle and SetStyle methods. SetStyle Метод принимает побитовое сочетание ControlStyles значения, чтобы определить, будет ли элемент управления иметь стандартный щелкните или дважды щелкните поведение, или если элемент управления будет обрабатывать обработку.The SetStyle method takes a bitwise combination of ControlStyles values to determine whether the control will have standard click or double-click behavior or if the control will handle its own mouse processing. Кроме того SystemInformation класс включает свойства, которые описывают возможности мыши и укажите, как мышь взаимодействует с операционной системой.In addition, the SystemInformation class includes properties that describe the capabilities of the mouse and specify how the mouse interacts with the operating system. В следующей таблице перечислены эти свойства.The following table summarizes these properties.

СвойствоProperty ОписаниеDescription
DoubleClickSize Получает размеры в пикселях, области, в котором пользователь должен щелкнуть дважды, чтобы операционная система обработала два щелчка как двойной щелчок.Gets the dimensions, in pixels, of the area in which the user must click twice for the operating system to consider the two clicks a double-click.
DoubleClickTime Получает максимальное число миллисекунд, которое может пройти между первым и вторым щелчком, чтобы операционная система обработала действия мыши как двойной щелчок.Gets the maximum number of milliseconds that can elapse between a first click and a second click for the operating system to consider the mouse action a double-click.
MouseButtons Возвращает число кнопок мыши.Gets the number of buttons on the mouse.
MouseButtonsSwapped Возвращает значение, указывающее, могут ли меняться местами функции левой и правой кнопок мыши.Gets a value indicating whether the functions of the left and right mouse buttons have been swapped.
MouseHoverSize Возвращает размеры прямоугольника (в пикселях), в котором должен находиться указатель мыши в течение времени наведения мыши перед тем, как создается сообщение о наведении мыши.Gets the dimensions, in pixels, of the rectangle within which the mouse pointer has to stay for the mouse hover time before a mouse hover message is generated.
MouseHoverTime Возвращает интервал времени (в миллисекундах), в течение которого указатель мыши должен оставаться в прямоугольнике наведения перед тем, как вызывается сообщение о наведении мыши.Gets the time, in milliseconds, that the mouse pointer has to stay in the hover rectangle before a mouse hover message is generated.
MousePresent Получает значение, указывающее, установлена ли мышь.Gets a value indicating whether a mouse is installed.
MouseSpeed Получает значение, указывающее текущую скорость мыши от 1 до 20.Gets a value indicating the current mouse speed, from 1 to 20.
MouseWheelPresent Возвращает значение, указывающее, установлена ли мышь с колесом прокрутки.Gets a value indicating whether a mouse with a mouse wheel is installed.
MouseWheelScrollDelta Получает значение приращения одном повороте колесика мыши.Gets the amount of the delta value of the increment of a single mouse wheel rotation.
MouseWheelScrollLines Возвращает число строк, прокручиваемых при вращении колесика мыши.Gets the number of lines to scroll when the mouse wheel is rotated.

См. такжеSee also

События мыши. Урок 5 курса "Pygame. Введение в разработку игр на Python"

В Pygame обрабатываются три типа событий мыши:

  • нажатие кнопки (значение свойства type события соответствует константе pygame.MOUSEBUTTONDOWN),

  • отпускание кнопки (MOUSEBUTTONUP),

  • перемещение мыши (MOUSEMOTION).

Какая именно кнопка была нажата, записывается в другое свойство события – button. Для левой кнопки это число 1, для средней – 2, для правой – 3, для прокручивания вперед – 4, для прокручивания назад – 5. У событий MOUSEMOTION вместо button используется свойство buttons, в которое записывается состояние трех кнопок мыши (кортеж из трех элементов). 

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

Таким образом, если вы нажали правую кнопку мыши точно в середине окна размером 200x200, то будет создан объект типа Event с полями event.type = pygame.MOUSEBUTTONDOWN, event.button = 3, event.pos = (100, 100).

У событий MOUSEMOTION есть еще один атрибут – rel. Он показывает относительное смещение по обоим осям. С помощью него, например, можно отслеживать скорость движения мыши.

Код ниже создает фигуры в местах клика мыши. Нажатие средней кнопки очищает поверхность.

Прорисовка фигур в местах клика мышью

import pygame
 
WHITE = (255, 255, 255)
RED = (225, 0, 50)
GREEN = (0, 225, 0)
BLUE = (0, 0, 225)
 
pygame.init()
sc = pygame.display.set_mode((400, 300))
sc.fill(WHITE)
pygame.display.update()
 
while 1:
    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            exit()
        if i.type == pygame.MOUSEBUTTONDOWN:
            if i.button == 1:
                pygame.draw.circle(sc, RED, i.pos, 20)
                pygame.display.update()
            elif i.button == 3:
                pygame.draw.circle(sc, BLUE, i.pos, 20)
                pygame.draw.rect(sc, GREEN, (i.pos[0]-10, i.pos[1]-10, 20, 20))
                pygame.display.update()
            elif i.button == 2:
                sc.fill(WHITE)
                pygame.display.update()
 
    pygame.time.delay(20)

В функции модуля draw вместо координат передается значение поля pos события. В pos хранятся координаты клика. В случае с функцией rect() извлекаются отдельные элементы кортежа pos. Вычитание числа 10 используется для того, чтобы середина квадрата, сторона которого равна 20-ти пикселям, точно соответствовала месту клика. Иначе в месте клика будет находиться верхний левый угол квадрата.

Функцию update() не обязательно вызывать три раза в ветках if-elif-elif. Ее можно вызвать в основном теле главного цикла. Однако в этом случае, когда кликов не происходит, она будет выполнять зря.

Также как в случае с клавиатурой в pygame есть свой модуль для событий мыши. Если нужно отслеживать длительное зажатие ее кнопок, следует воспользоваться функцией get_pressed() модуля pygame.mouse. Здесь же есть функция для считывания позиции курсора – get_pos(). Следующий код рисует синий круг в местах клика левой кнопкой мыши:

...
 
while 1:
    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            exit()
 
    pressed = pygame.mouse.get_pressed()
    pos = pygame.mouse.get_pos()
    if pressed[0]:
        pygame.draw.circle(sc, BLUE, pos, 5)
        pygame.display.update()
 
    pygame.time.delay(20)

Функция mouse.get_pressed() возвращает трехэлементный кортеж. Первый элемент (с индексом 0) соответствует левой кнопке мыши, второй – средней, третий – правой. Если значение элемента равно единице, значит, кнопка нажата. Если нулю, значит – нет. Так выражение pressed[0] есть истина, если под нулевым индексом содержится единица.

Чтобы скрыть курсор (например, в игре, где управление осуществляется исключительно клавиатурой), надо воспользоваться функцией pygame.mouse.set_visible(), передав в качестве аргумента False.

Так можно привязать графический объект к курсору (в данном случае привязывается квадрат):

...
pygame.mouse.set_visible(False)
 
while 1:
    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            exit()
 
    sc.fill(WHITE)
 
    if pygame.mouse.get_focused():
        pos = pygame.mouse.get_pos()
        pygame.draw.rect(sc, BLUE, (pos[0]-10, pos[1]-10, 20, 20))
 
    pygame.display.update()
 
    pygame.time.delay(20)

Функцией get_pos() мы можем считывать позицию курсора, даже если он не виден. Далее в этой позиции рисуем фигуру в каждом кадре.

Функция get_focused() проверяет, находится ли курсор в фокусе окна игры. Если не делать эту проверку, то при выходе курсора за пределы окна, квадрат будет постоянно прорисовываться у края окна, где произошел выход, т. е. не будет исчезать.

Практическая работа

Напишите код в котором имитируется полет снаряда (пусть его роль сыграет круг) в место клика мышью. Снаряд должен вылетать из нижнего края окна и лететь вверх, т. е. изменяться должна только координата y. Пока летит один, другой не должен появляться. Когда снаряд достигает цели, должен имитировать взрыв, например, в этом месте прорисовываться квадрат.

Курс с примерами решений практических работ: android-приложение, pdf-версия.

Отправить ответ

avatar
  Подписаться  
Уведомление о