X11 Mouse Movement Event - PullRequest
       9

X11 Mouse Movement Event

5 голосов
/ 20 февраля 2012

При создании окна в XLib

  1. Какие маски я предоставляю члену SetWindowAttributes.event_mask?
  2. Что я должен передать 11-му параматору XCreateWindow()
  3. Какие события я ищу в основном цикле сообщений (где я использую XNextEvent(lDisplay, &xEvent);?
  4. Поскольку X ведет себя не так, как Microsoft Win32 API, как мне определить, находится ли мышь над моим окном или окном в моем «Приложении», а не над рабочим столом?

Я искал похожий пост. Если он уже есть, пожалуйста, укажите мне правильное направление.


Обновление

Для тех, кто хочет простого ответа на части 1-3:

1.

xAttributes.event_mask =  ExposureMask | KeyPressMask | ButtonPress |
                          StructureNotifyMask | ButtonReleaseMask |
                          KeyReleaseMask | EnterWindowMask | LeaveWindowMask |
                          PointerMotionMask | Button1MotionMask | VisibilityChangeMask |
                          ColormapChangeMask;

2

unsigned long valuemask = CWEventMask | CWBackPixel | CWBorderPixel | CWCursor;


  1.                 switch (xEvent.type)
                    {
                    case MapNotify:
                        break;
                    case Expose:
                        // If this is not the last expose event break
                        if (xEvent.xexpose.count != 0)
                            break;
                        else
                            break;
                    case ConfigureNotify:
                        break;
                    case VisibilityNotify:
                        break;
                    case DestroyNotify:
                        break;
                    case ButtonPress:
                    case ButtonRelease:
                    case EnterNotify:
                    case MotionNotify:
                    case LeaveNotify:
                        if(_mouseHandler)
                            _mouseHandler->HandleInput(lDisplay, &xEvent);
                        break;
                    case KeyPress:
                    case KeyRelease:
                        if(_keyboardHandler)
                            _keyboardHandler->HandleInput(lDisplay, &xEvent);
                        break;
                    default:
                        if(_keyboardHandler)
                            _keyboardHandler->HandleInput(lDisplay, &xEvent);
                        break;
                    }
    

Ответы [ 2 ]

4 голосов
/ 20 февраля 2012

XLib довольно хорошо документирован.Например Руководство по программированию XLib: Маски событий

2 голосов
/ 20 февраля 2012

Первые три хорошо документированы, я думаю.

Чтобы определить, находится ли мышь над вашим окном, прослушайте события Enter и Leave. Утилита xev - отличный способ понять, какие события существуют в системе X Window и когда они отправляются.

...