2

はい。「XGetWindowAttributes()」と「XGetGeometry()」を使用して両方を試しましたが、常に0,0でx、y値のみが得られます。

しかし、ウィンドウを画面全体の中央に移動すると、画面解像度が 1600、900 の場合、戻り値は 800、450 になるはずです。ただし、常に 0,0 を返します。

以下は私がテストしたコードであり、その下に、描画された赤い点が取得したい2Dスクリーン座標のポイントを説明する写真を添付し​​ています。

int* getWindowPos(Display *dpy, Window *curWin) {
    int winPos[2]; 
    unsigned int width, height, bwidth, depth;
    Window root;

    root =  XRootWindow(GLWin.dpy, 0);
//    Window myWin;
//    myWin = XRootWindow(dpy, 0);

    //XWindowAttributes xwa;
    //XGetWindowAttributes(dpy, *curWin, &xwa);
    XGetGeometry(dpy, *curWin, &root, &winPos[0], &winPos[1], &width, &height, &bwidth, &depth );
   // printf("%d %d\n", xwa.x, xwa.y);

    return winPos;

}

このウィンドウの左上の位置の少なくとも 2D 画面座標を取得したい!

4

1 に答える 1

3

試す

Window child;
XTranslateCoordinates(dpy, *curWin, root, 0, 0, &winPos[0], &winPos[1], &child);

これにより、左上隅が表示されます。他の角についても、(0, 高さ-1)、(幅-1, 0)、(幅-1, 高さ-1) で繰り返します。

于 2013-09-05T12:12:04.250 に答える