XWindow 如何取得鼠标位置的窗口

Linux桌面程序开发的相关资料好难找啊,还好找到了XWindow的各种函数说明:

https://tronche.com/gui/x

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 如何取得鼠标位置的窗口

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注