2016-11-13 88 views
0

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

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

有人能告诉我如何使用X11和XRender(或XCursor)库来创建一个游标,静态和动画,并可能如何做,所以游标可以用于任何X11窗口。

谢谢!

PS。

我正在编写一个开源的libary,用于我的程序中使用的Gui,我试图将这个功能添加到libary中,但我不习惯使用X11进行编程。

+0

我强烈建议使用像[Qt](http://qt.io)这样的工具包。 X11真的很复杂,你需要几个月才能掌握更多。它正在变得过时(可能被Wayland所取代)。 –

回答

0

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

首先,查看specification of the X render extension

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

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

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

  3. 然后,您将所有帧的所有CURSOR s的列表,然后使用CreateAnimCursor创建一个表示动画光标的单个CURSOR

这一切都归结为为每一帧创建PICTURE。 A PICTURE使用来自DRAWABLEPICTFORMATCreatePicture创建。 DRAWABLE将是PIXMAP与光标帧的实际位掩码,PICTFORMAT指定位图中的哪些通道表示红色,绿色和绿色通道,并且必须是从QueryPictformat返回的枚举的PICTFORMAT之一。

欲了解更多信息,请参阅上述X渲染扩展规范。