2010-09-27 11 views
6

Jak zdobyć najwyższego poziomu położenia okna w stosunku do okna głównego (czyli cały ekran) stosując zwykły ol”Xlib (lub zupełnie nowy xcb)?Okna w Xlib

Odpowiedz

4

Korzystanie XTranslateCoordinates (lub równoważny) xcb przełożenia 0,0 na oknie, aby wykorzenić współrzędne okna.

7

Korzystanie Xlib:

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

Istnieje także wiele innych informacji, które pochodzą z XWindowAttributes. Zobacz here.

6

X, Y elementy konstrukcji są zwracane przez XGetWindowAttributes względem pochodzenia okna rodzicem. To nie to samo, co w lewym górnym rogu ekranu.

Wywoływanie XTranslateCoordinates przechodzącej okna głównego i 0,0 daje współrzędne okna względem ekranu.

stwierdziliśmy, że jeśli piszę:

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); 

wartości wyświetlanych przez printf są te, które, jeśli przekazany do XMoveWindow przechowywać okno w jego aktualnej pozycji. Zatem te współrzędne są rozsądnie uznawane za położenie okna.

+0

to jest odpowiedź, że pracował dla mnie, a także – thinlizzy