8

単純な古い xlib (または真新しい XCB) を使用して、ルート ウィンドウ (つまり、画面全体) に対するトップレベル ウィンドウの位置を取得する方法は?

4

4 に答える 4

14

XGetWindowAttributes によって返される構造の x、y コンポーネントは、ウィンドウの親の原点に相対的です。これは、画面の左上を基準にしたものと同じではありません。

ルート ウィンドウと 0,0 を渡して XTranslateCoordinates を呼び出すと、画面に対するウィンドウの座標が得られます。

私が書いた場合、私はそれを見つけました:

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 に答える