如何在C应用程序中将鼠标光标设置在X11上

Mor*_*red 3 c x11 mouse cursor

我有一个相当大的,相当古老的C应用程序,已经移植到Linux.我负责让鼠标光标正常工作,但有一些问题.我能够将我们需要的大多数游标转换为使用XFontCursor提供的标准游标,方法如下:

gCursorTable[waitCurs] = XCreateFontCursor(gDisplay, XC_watch);
...
XDefineCursor(gDisplay, WHostWindow(w), gCursorTable[cursor]);
XFlush(gDisplay);
Run Code Online (Sandbox Code Playgroud)

对于在XFontCursor提供的极其有限的(有用)游标列表中具有类似物的游标,这是很好的,但是我还想设置其他内置的主题游标.例如,我希望能够在我的应用程序中将光标设置为bd_double_arrow(它包含在每个光标主题中,并且是Windows的标准对角线大小调整光标),但显然你不能用XCreateFontCursor做到这一点.这似乎很基本,但对于我的生活,我找不到任何关于如何做的描述.

我只是想知道其他X11应用程序如何设置游标,因为它们显然是从全局主题获取它们而不仅仅是使用XCreateFontCursor.

n. *_* m. 5

使用主题游标的最简单方法是使用Xcursor库.

#include <X11/Xcursor/Xcursor.h>
...
Cursor c = XcursorLibraryLoadCursor(dpy, "sb_v_double_arrow");
XDefineCursor (dpy, w, c);
Run Code Online (Sandbox Code Playgroud)

名称是X11/cursorfont.hsans的标准游标名称XC_.如果主题有额外的游标,例如bd_double_arrow,也可以使用这些名称(但并非所有主题都有它们!)

如果主题没有替换某些核心X游标,则库将回退到核心游标.