Événement de mouvement de souris X11

Lors de la création d’une fenêtre dans XLib

  1. Quels sont les masques que je fournis au membre SetWindowAtsortingbutes.event_mask ?
  2. Que dois-je passer au 11ème paramètre de XCreateWindow()
  3. Quels sont les événements que je recherche dans la boucle de message principale (Où j’utilise XNextEvent(lDisplay, &xEvent);
  4. Étant donné que X se comporte différemment de l’API Win32 de Microsoft, comment déterminer si la souris se trouve sur ma fenêtre ou sur une fenêtre de mon “Application” et non sur le bureau?

J’ai cherché un poste similaire. S’il en existe déjà un, dirigez-moi dans la bonne direction.


Mettre à jour

Pour ceux qui veulent la réponse facile aux parties 1 à 3:

1.

 xAtsortingbutes.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; } 

XLib est assez bien documenté. Par exemple, Manuel de programmation XLib: Masques d’événements

Les trois premiers sont bien documentés, je pense.

Pour déterminer si la souris survole votre fenêtre, écoutez les événements Enter et Leave. L’utilitaire xev est un excellent moyen de comprendre quels événements existent dans le système de fenêtres X et quand ils sont envoyés.