Xlib 中的窗口位置
如何使用普通的 ol' xlib (或全新的 XCB)获取相对于根窗口(即整个屏幕)的顶级窗口位置?
How to get top-level window position relative to root window (i.e. whole screen) using plain ol' xlib (or brand new XCB)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
XGetWindowAttributes 返回的结构的 x,y 分量相对于窗口父窗口的原点。这与相对于屏幕左上角的位置不同。
调用 XTranslateCoordinates 并传递根窗口和 0,0 给出窗口相对于屏幕的坐标。
我发现如果我写:
printf 显示的值是那些如果传递给 XMoveWindow 则将窗口保持在当前位置的值。因此,这些坐标被合理地认为是窗口的位置。
The x,y components of the structure returned by XGetWindowAttributes are relative to the origin of the window's parent. That's not the same as relative to the top left of the screen.
Calling XTranslateCoordinates passing the root window and 0,0 gives coordinates of the window relative to the screen.
I found that if I write:
The values displayed by the printf are those which, if passed to XMoveWindow, keep the window at its current position. Thus those coordinates are reasonably considered to be the position of the window.
使用 Xlib:
XWindowAttributes
还附带许多其他信息。请参阅此处。Using Xlib:
There are also lots of other informations that come with
XWindowAttributes
. See here.使用 XTranslateCoordinates(或 xcb 等效项)将窗口上的 0,0 转换为根窗口坐标。
Use XTranslateCoordinates (or xcb equivalent) to translate 0,0 on the window to root window coordinates.
这就是您将使用 XCB 执行的操作:
This is what you would do with XCB: