GetMouse
 
Извлекает состояние указанного устройства мыши

Синтаксис

Declare Function GetMouse ( ByRef x As Integer, ByRef y As Integer, ByRef wheel As Integer = 0, ByRef buttons As Integer = 0, ByRef clip As Integer = 0 ) As Integer

Использование

result = GetMouse (x, y [, [ wheel ] [, [ buttons ] [, [ clip ]]]])

Параметры

x
значение координаты x
y
значение координаты y
wheel
значение колеса прокрутки
buttons
состояние кнопок
clip
состояние отсечения (захвата мыши в графическом окне)

Возвращаемое значение

0 в случае успеха или 1 в случае возникновения ошибки. (установка ошибки во время выполнения)

Описание

GetMouse извлекает позицию мыши и статус кнопок; информация возвращается в переменных, переданных этой функции в качестве ссылки. Если мышь не доступна, все переменные будут содержать значение -1.

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

В графическом режиме, x и y всегда возвращаются в пиксельных координатах по отношению к верхнему левому углу экрана, который в данном случае является 0,0; пользовательские системы координат, устанавливаемые с помощью View или Window не влияют на координаты, возвращаемые GetMouse. Если мышь выходит из окна, все значения устанавливаются в -1.

Wheel - это счетчик колеса мыши; вращение колеса от вас создает увеличение, вращение колеса к вам делает уменьшение. При запуске программы или когда новый графический режим устанавливается через Screen, положение счетчика колеса сбрасывается в 0. FreeBASIC может и не поддерживать колесо мыши для какой-то платформы, и в этом случае всегда возвращается 0.

Buttons сохраняет статус кнопок как битовую маску: бит 0 устанавливается, если левая кнопка мыши нажата; бит 1 устанавливается, если правая кнопка мыши нажата; бит 2 устанавливается, если средняя кнопка мыши/колесо нажата.

Clip возвращает статус отсечения мыши; если 1, мышь захвачена в пределах графического окна; если 0, мышь не захвачена.

Пример

Dim As Integer x, y, buttons, res 
' Установим режим окна
ScreenRes 640, 480, 8
Do
    ' Получим координаты мыши х, у и кнопки. Положение колеса не проверяем.
    res = GetMouse (x, y, , buttons)
    Locate 1, 1
    If res <> 0 Then '' Ошибка

#ifdef __FB_DOS__
        Print "Mouse or mouse driver not available"
#else
        Print "Mouse not available or not on window"
#endif

    Else
        Print Using "Mouse position: ###:###  Buttons: "; x; y;
        If buttons And 1 Then Print "L";
        If buttons And 2 Then Print "R";
        If buttons And 4 Then Print "M";
        Print "   "
    End If
Loop While Inkey = ""
End

'Пример 2: type-union-type структура
Type mouse
    As Integer res
    As Integer x, y, wheel, clip
    Union
        buttons As Integer
        Type
            Left:1 As Integer
            Right:1 As Integer
            middle:1 As Integer
        End Type
    End Union
End Type
 
Screen 11
Dim As mouse m

Do
    m.res = GetMouse( m.x, m.y, m.wheel, m.buttons, m.clip )
    Cls
    Print Using "res = #"; m.res
    Print Using "x = ###; y = ###; wheel = +###; clip = ##"; m.x; m.y; m.wheel; m.clip
    Print Using "buttons = ##; left = #; middle = #; right = #"; m.buttons; m.left; m.middle; m.right
    Sleep 10, 1
Loop While Inkey = ""


Различия диалектов

  • Не доступна в диалекте -lang qb , но есть псевдоним __Getmouse. Передаваемые переменные должны быть типа Long вместо Integer.

Различия платформ

  • В Win32, возвращаемые значения изменения колеса не гарантируются в полноэкранном режиме консоли.
  • В DOS, значение "clip" не имеет никакого эффекта. Кроме того колесо и средняя кнопка не будут работать, если не поддерживаются драйвером мыши. См. также FaqDOS.

Отличия от QB

  • Новое в FreeBASIC

См. также