2010-09-27 10 views
6

Comment obtenir la position de la fenêtre de niveau supérieur par rapport à la fenêtre racine (c'est-à-dire l'intégralité de l'écran) à l'aide de plain ol 'xlib (ou tout nouveau XCB)?Position de la fenêtre dans Xlib

Répondre

4

Utilisez XTranslateCoordinates (ou l'équivalent xcb) pour traduire 0,0 sur la fenêtre en coordonnées de la fenêtre racine.

7

En utilisant Xlib:

XWindowAttributes xwa; 
XGetWindowAttributes(display, window, &xwa); 
printf("%d %d\n", xwa.x, xwa.y); 

Il y a aussi beaucoup d'autres informations qui viennent avec XWindowAttributes. Voir here.

6

Les composants x, y de la structure renvoyée par XGetWindowAttributes sont relatifs à l'origine du parent de la fenêtre. Ce n'est pas la même chose par rapport à la partie supérieure gauche de l'écran.

Appel de XTranslateCoordinates en passant la fenêtre racine et 0,0 donne les coordonnées de la fenêtre par rapport à l'écran.

Je trouve que si j'écris:

int x, y; 
Window child; 
XWindowAttributes xwa; 
XTranslateCoordinates(display, window, root_window, 0, 0, &x, &y, &child); 
XGetWindowAttributes(display, window, &xwa); 
printf("%d %d\n", x - xwa.x, y - xwa.y); 

Les valeurs affichées par le printf sont ceux qui, si elle est adoptée à XMoveWindow, garder la fenêtre à sa position actuelle. Ainsi, ces coordonnées sont raisonnablement considérées comme la position de la fenêtre.

+0

c'est la réponse qui a fonctionné pour moi aussi – thinlizzy

Questions connexes