Linux桌面程序开发的相关资料好难找啊,还好找到了XWindow的各种函数说明:
https://tronche.com/gui/x/xlib/function-index.html
https://www.x.org/releases/X11R7.7/doc/man/man3
XQueryPointer
XQueryPointer函数返回指针在逻辑上所在的根窗口,并且指针的坐标相对于根窗口的原点。如果XQueryPointer返回False,则该指针不在指定窗口所在的屏幕上,并且XQueryPointer将None返回给child_return,将0返回给win_x_return和win_y_return。如果XQueryPointer返回True,则返回到win_x_return和win_y_return的指针坐标相对于指定窗口的原点。在本例中,XQueryPointer返回包含指向child_return指针的子指针(如果有的话),否则返回None。
在mask_return中,XQueryPointer返回键盘按钮和修饰键的当前逻辑状态。它将mask_return设置为位包含或一个或多个按钮或修改器键位掩码,以匹配鼠标按钮和修改器键的当前状态。
XQueryPointer可以生成一个BadWindow错误。
Bool XQueryPointer(
Display
*display, //指定到X服务器的连接。在Qt中可以直接用 QX11Info::display()
Window w, //指定的窗口
Window
*root_return, //返回指针所在的根窗口。
Window *child_return, //返回指针所在的子窗口(如果有的话)。
int
*root_x_return, //返回相对于根窗口原点的指针坐标。
int *root_y_return,
int
*win_x_return, //返回相对于指定窗口的指针坐标。
int *win_y_return,
unsigned int
*mask_return //返回扩展键和指针按钮的当前状态。
);
XTranslateCoordinates
如果XTranslateCoordinates返回True,它将获取相对于源窗口原点的src_x和src_y坐标,并将这些坐标返回到相对于目标窗口原点的dest_x_return和dest_y_return。如果XTranslateCoordinates返回False,则src_w和dest_w位于不同的屏幕上,而dest_x_return和dest_y_return为零。如果dest_w的映射子元素中包含坐标,则该子元素将返回给child_return。否则,child_return设置为None。
XTranslateCoordinates可以生成一个BadWindow错误。
Bool
XTranslateCoordinates(
Display *display,
Window src_w,
Window dest_w,
int src_x,
int src_y,
int *dest_x_return,
int *dest_y_return,
Window *child_return
);
XQueryTree
XQueryTree函数返回根ID、父窗口ID、指向子窗口列表的指针(没有子窗口时为空)以及指定窗口的子窗口列表中的子窗口数量。这些孩子按当前的顺序排列,从最下面(第一)到最上面(最后)。如果失败,XQueryTree返回零;如果成功,则返回非零。若要在不再需要非空子列表时释放它,请使用XFree。
XQueryTree可以生成一个BadWindow错误。
Status XQueryTree(
Display
*display,
Window w, //指定一个窗口,要获取它的子窗口的列表、根、父窗口和子窗口的数目。
Window *root_return, //返回根窗口。
Window *parent_return, //返回父窗口。
Window **children_return, //返回子列表。
unsigned int *nchildren_return //返回子节点的数量。
);
转载请注明:《XWindow 如何取得鼠标位置的窗口》