2010-09-27 14 views
6

Как получить положение окна верхнего уровня относительно корневого окна (т. Е. Весь экран), используя простой ol xlib (или новый XCB)?Положение окна в Xlib

ответ

4

Используйте XTranslateCoordinates (или эквивалент xcb), чтобы перевести 0,0 в окне на корневые координаты окна.

7

Использование Xlib:

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

Есть также много другой информации, которые приходят с XWindowAttributes. См. here.

6

Компоненты x, y структуры, возвращаемые атрибутами XGetWindowAttributes, относятся к началу родителя окна. Это не то же самое, что в левом верхнем углу экрана.

Вызов XTranslateCoordinates, передающий корневое окно, и 0,0 дает координаты окна относительно экрана.

Я обнаружил, что если я пишу:

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

Значения, отображаемые Printf являются те, которые, если он будет принят в XMoveWindow, держать окно в его текущей позиции. Таким образом, эти координаты разумно считаются позицией окна.

+0

Это ответ, который работал и для меня – thinlizzy

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