将 X11 光标设置为箭头

发布于 2024-11-25 14:07:23 字数 736 浏览 1 评论 0 原文

我在调用 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 是必需的,因为这是一个与工具包无关的程序。

预计到达时间:有更多上下文可用;请参阅 源文件

I attempted the following in a call to 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);

This creates the window, but it doesn't affect the pointer when it rolls over the window.

I want to use the user's desktop environment's standard pointer cursor when the mouse appears over my window.

Xlib is required, because this is a toolkit-agnostic program.

ETA: Additional context is available; see create_ctt_window starting on line 35 in the source file.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

断桥再见 2024-12-02 14:07:23
  1. ctt_attributes->cursor = XCreateFontCursor(dpy, XC_arrow);
  2. 这不是桌面环境的标准指针光标,这是 X11 相当丑陋的位图光标。如果您想要主题光标,请使用 libXcursor。我没有这方面的经验。
  1. ctt_attributes->cursor = XCreateFontCursor(dpy, XC_arrow);
  2. This is not the desktop environment's standard pointer cursor, this is the X11 rather ugly bitmapped cursor. If you want themed cursors, use libXcursor. I have no experience with it.
陌路黄昏 2024-12-02 14:07:23

这是《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 */ 

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

Here's the example from 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 */ 

So it looks like n.m. is spot-on. You need to call XCreateFontCursor to translate XC_arrow (which is just an integer that designates the cursor's location in the font's encoding vector) into a Cursor resource. I think the Cursor resource is just an integer, too. That's why you get no compile error. But you do indeed have a type mismatch.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文