将X11光标设置为箭头

时间:2011-07-19 18:08:22

标签: c cursor mouse x11 xlib

我在调用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 :可以使用其他上下文;请参阅source file中第35行的create_ctt_window

2 个答案:

答案 0 :(得分:4)

  1. ctt_attributes->cursor = XCreateFontCursor(dpy, XC_arrow);
  2. 这不是桌面环境的标准指针光标,这是X11相当难看的位图光标。如果需要主题游标,请使用libXcursor。我没有经验。

答案 1 :(得分:1)

以下是“Xlib编程手册”第1卷第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资源也只是一个整数。这就是为什么你没有编译错误。但你确实有类型不匹配。