【问题标题】:Set X11 cursor to arrow将 X11 光标设置为箭头
【发布时间】:2011-07-19 18:08:22
【问题描述】:

我在调用 XCreateWindow() 时尝试了以下操作:

unsigned long ctt_attribute_mask = CWWinGravity | CWCursor;

ctt_attributes->win_gravity = NorthEastGravity;
ctt_attributes->cursor = XC_arrow;

ctt_window = XCreateWindow(dpy, parent, ctt_xpos, ctt_ypos,
             ctt_xy_size, ctt_xy_size, ctt_border,
             ctt_depth, ctt_class, ctt_visual,
             ctt_attribute_mask, ctt_attributes);

这会创建窗口,但当指针在窗口上滚动时不会影响指针。

当鼠标出现在我的窗口上时,我想使用用户桌面环境的标准指针光标。

需要 Xlib,因为这是一个与工具包无关的程序。

ETA:可以使用其他上下文;请参阅create_ctt_windowsource file 的第 35 行开始。

【问题讨论】:

    标签: c x11 xlib mouse-cursor


    【解决方案1】:
    1. ctt_attributes->cursor = XCreateFontCursor(dpy, XC_arrow);
    2. 这不是桌面环境的标准指针光标,这是 X11 相当丑陋的位图光标。如果您想要主题游标,请使用 libXcursor。我没有这方面的经验。

    【讨论】:

    • 有趣,感谢指向 libXcursor 的指针。现在我只需要弄清楚如何使用它。手册页中列出的 API,好吧,它们似乎不起作用; char *XcursorGetTheme (Display *dpy) 即使对于光标主题目录中存在的主题名称也会返回 NULL,而 Cursor XcursorLibraryLoadCursor (Display *dpy, const char *name) 似乎也没有实际执行任何操作。当然,我可能做错了什么。当谈到低级 X11 编程时,我似乎被诅咒了。 :)
    • 啊哈。事实证明,libXcursor 无法发现显示器上正在使用的鼠标主题是什么。我将不得不求助于以依赖 WM/DE 的方式从底层 WM 和/或 DE 中发现这一点。便携性就这么多……
    【解决方案2】:

    这是 The Xlib Programming Manual, vol 1, p 182 中的示例。

    #include <X11/cursorfont.h>
    int cursor_shape = XC_arrow;
    Window window;
    Cursor cursor;
    cursor = XCreateFontCursor(display, cursor_shape);
    XDefineCursor(display, window, cursor);
    /* Now cursor will appear when pointer is in window */ 
    

    所以它看起来像 n.m.恰到好处。您需要调用 XCreateFontCursor 将 XC_arrow(它只是一个整数,用于指定光标在字体的编码向量中的位置)转换为 Cursor 资源。我认为 Cursor 资源也只是一个整数。这就是为什么你没有编译错误。但你确实有类型不匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多