2010-09-27 5 views
6

Wie bekomme ich die oberste Fensterposition relativ zum Root-Fenster (d. H. Den ganzen Bildschirm) mit plain ol 'xlib (oder brandneuen XCB)?Fensterposition in Xlib

Antwort

4

Verwenden Sie XTranslateCoordinates (oder xcb-Äquivalent), um 0,0 im Fenster in die Koordinaten des Stammfensters zu übersetzen.

7

Xlib Verwendung:

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

Es gibt auch viele andere Informationen, die mit XWindowAttributes kommen. Siehe here.

6

Die x, y-Komponenten der von XGetWindowAttributes zurückgegebenen Struktur sind relativ zum Ursprung des übergeordneten Fensters. Das ist nicht dasselbe wie oben links auf dem Bildschirm.

Der Aufruf von XTranslateCoordinates beim Übergeben des Stammfensters und 0,0 gibt die Koordinaten des Fensters relativ zum Bildschirm an.

Ich fand, dass, wenn ich schreibe:

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

Die von der printf angezeigten Werte sind diejenigen, die, wenn sie zu XMoveWindow weitergegeben, um das Fenster in seiner aktuellen Position halten. Daher werden diese Koordinaten vernünftigerweise als die Position des Fensters betrachtet.

+0

das ist die Antwort, die auch für mich funktionierte – thinlizzy

Verwandte Themen