Xlib中的窗口位置

el.*_*ado 5 x11 xlib xcb

如何使用普通的'xlib(或全新的XCB)获得相对于根窗口(即整个屏幕)的顶级窗口位置?

小智 8

XGetWindowAttributes返回的结构的x,y组件相对于窗口父级的原点.这与屏幕左上角的相对不同.

调用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 );
Run Code Online (Sandbox Code Playgroud)

printf显示的值是那些传递给XMoveWindow的值,它将窗口保持在当前位置.因此,这些坐标被合理地认为是窗口的位置.


And*_*ner 6

使用Xlib:

XWindowAttributes xwa;
XGetWindowAttributes(display, window, &xwa);
printf("%d %d\n", xwa.x, xwa.y);
Run Code Online (Sandbox Code Playgroud)

还有很多其他信息XWindowAttributes.看到这里.


Hav*_*c P 5

使用 XTranslateCoordinates(或等效的 xcb)将窗口上的 0,0 转换为根窗口坐标。