【问题标题】:How to create a cursor in X11 from raw data c++如何从原始数据 C++ 在 X11 中创建游标
【发布时间】:2016-11-13 21:22:28
【问题描述】:

我一直在寻找这个问题一段时间。我正在制作一个跨平台程序,我已经弄清楚如何使用 Windows API 加载动画光标,以及如何在运行时从原始位图数据创建光标。但是,对于我的程序的 Unix/Linux 版本,我找不到适用于 X11 的好的文档。我知道我需要使用此文档https://www.x.org/releases/X11R7.6/doc/libXrender/libXrender.txt 中的 XRender 扩展函数 XRenderCreateCursor 和 XRenderCreateAnimCursor,但我不知道如何使用这些函数,文档现在显示了任何示例。

原始图像数据也是 ARGB 格式,如果可能的话,我希望这些光标支持 Alpha 通道。

有人可以告诉我如何使用 X11 和 XRender(或 XCursor)库来创建静态和动画光标,以及如何创建光标以使光标可用于任何 X11 窗口。

谢谢!

PS。

我正在为我的程序使用的跨平台 Gui 编辑一个开源库,我正在尝试将此功能添加到库中,但我不习惯使用 X11 进行编程。

【问题讨论】:

  • 我强烈建议使用像Qt 这样的工具包。 X11 真的很复杂,你需要几个月的时间才能掌握更多。而且它正在变得过时(可能被 Wayland 取代)。

标签: c++ linux unix x11


【解决方案1】:

谈到 X,没有什么是简单的。

首先,查看specification of the X render extension

创建动画光标的步骤如下。

  1. 首先,您需要为动画光标的每一帧创建一个PICTURE,使用CreatePicture

  2. 使用CreateCursor 从每个PICTURE 创建一个CURSORCreateCursor 返回一个 CURSOR 句柄。

  3. 然后,获取所有帧的所有CURSORs 列表,然后使用CreateAnimCursor 创建一个代表动画光标的CURSOR

这一切都归结为为每个帧创建一个PICTURE。使用CreatePictureDRAWABLEPICTFORMAT 创建PICTUREDRAWABLE 将是 PIXMAP 与光标帧的实际位掩码,PICTFORMAT 指定像素图中的哪些通道代表红色、颜色和绿色通道,并且必须是返回的枚举 PICTFORMATs 之一来自QueryPictformat

有关详细信息,请参阅前面提到的 X 渲染扩展规范。

【讨论】:

    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多