如何使用普通的 ol' xlib(或全新的 XCB)获得相对于根窗口(即整个屏幕)的顶级窗口位置?
问问题
10178 次
4 回答
14
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 );
printf 显示的值是那些,如果传递给 XMoveWindow,则将窗口保持在其当前位置。因此,这些坐标被合理地认为是窗口的位置。
于 2014-05-29T18:55:05.870 回答
6
使用 Xlib:
XWindowAttributes xwa;
XGetWindowAttributes(display, window, &xwa);
printf("%d %d\n", xwa.x, xwa.y);
还有很多其他的信息XWindowAttributes
。见这里。
于 2010-10-23T15:56:02.943 回答
5
使用 XTranslateCoordinates(或 xcb 等效项)将窗口上的 0,0 转换为根窗口坐标。
于 2010-09-27T19:56:44.830 回答
3
这就是您将使用 XCB 执行的操作:
auto geom = xcb_get_geometry(xcb_connection(), window);
auto offset = xcb_translate_coordinate(xcb_connection(), window, rootwin, geom->x, geom->y);
offset->dst_x // top-level window's x offset on the screen
offset->dst_y // top-level window's y offset on the screen
geom->width // top-level window's width
geom->height // top-level window's height
于 2018-04-28T19:34:44.797 回答