2012-02-20 2 views
4

При создании окна в XLibX11 Мышь Движение Событие

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

Я искал аналогичное сообщение. Если есть уже один, пожалуйста, укажите мне правое направление.


Update

Для тех, кто хочет простой ответ на части 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; 
           } 
    
+1

XLib довольно хорошо документирован. Вы пытались найти в Интернете? Например, [Руководство по программированию на XLIB: маски событий] (http://tronche.com/gui/x/xlib/events/mask.html) –

ответ

1

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

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

+0

Я совершенно забыл о «xev», очень полезный. – erb

Смежные вопросы