【问题标题】:How to set mouse cursor on X11 in a C application如何在 C 应用程序中在 X11 上设置鼠标光标
【发布时间】:2013-09-22 07:42:25
【问题描述】:

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

gCursorTable[waitCurs] = XCreateFontCursor(gDisplay, XC_watch);
...
XDefineCursor(gDisplay, WHostWindow(w), gCursorTable[cursor]);
XFlush(gDisplay);

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

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

【问题讨论】:

    标签: c x11 mouse-cursor


    【解决方案1】:

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

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

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

    如果主题没有替代某些核心 X 光标,则库将回退到核心光标。

    【讨论】:

    • 我已经能够使用 XCreateFontCursor 加载所有标准光标名称。虽然我想我有另一种方法很好,但这对我没有多大帮助。人们如何使用显示像 bd_double_arrow 这样的光标,它在每个光标主题中,但不在 cursorfont.h 中。
    • 对不起,我忘了说如果你的主题有它,你也可以使用像“bd_double_arrow”这样的非核心光标名称(我的没有!)查看更新的答案。
    • 好吧,我在 OpenSuse 12.3 中的默认 kde 主题上尝试过,但 bd_double_arrow 不起作用。他们必须有那个光标图像,因为当您将鼠标悬停在窗口的角落时显然会使用它。假设您的解决方案确实有效,是否可以找到这些游标的名称?
    • 默认 KDE 主题没有 bd_double_arrow。角落调整大小箭头是size_bdiagsize_fdiag。查看man Xcursor 以查看搜索光标图像的位置,有一个很大的列表,我不知道它们在SuSE 中的位置。我认为没有 API 可以列出所有可用的游标名称;要查看是否提供了游标,只需尝试加载它。阅读 Xcursors 的源代码以获得更深入的见解。
    【解决方案2】:

    点击该页面上的一些链接后:尝试XCreatePixmapCursor。从它的描述来看,你可以创建任何你想要的 2 色光标。

    【讨论】:

    • 我不想创建自己的光标,我想使用为主题设置的光标。每个光标主题都包含它自己的 bd_double_arrow (这是您在左上角和右下角获得的对角线大小箭头以调整窗口大小),我想使用它,这样我的应用程序就不会像疼痛一样突出拇指...我只是不知道怎么做。
    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多