2020-02-19 3539 0
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 //返回子节点的数量。 );