在X窗口系统中获取窗口窗口的位置?

时间:2013-09-05 08:32:50

标签: c++ linux user-interface xlib x11

是。我试过两个,使用“XGetWindowAttributes()”和“XGetGeometry()”,但它只给出x,y值始终为0,0。

但是当我将窗口移动到整个屏幕的中间位置时,在这种情况下,如果我的屏幕分辨率为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;

}

I want to get at least 2D screen coordinate of top-left position of this window!

1 个答案:

答案 0 :(得分:1)

尝试

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

这应该会给你左上角。对其他角点重复(0,高度-1),(宽度-1,0)和(宽度-1,高度-1)。