本文记录我学习开发 X11 应用的笔记
如何类似 WPF 的 Owner 之类的关系?可使用 XSetTransientForHint 方法。比如有 a 和 b 两个窗口,使用下面代码即可设置 a 窗口一定在 b 窗口上方
// 我们使用XSetTransientForHint函数将窗口a设置为窗口b的子窗口。这将确保窗口a始终在窗口b的上方
XSetTransientForHint(Display, a, b);
以上代码放在 github 和 gitee 上,可以使用如下命令行拉取代码
先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 0331c5dd6057106df5cb179e45d34966a3eafd1b
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码,将 gitee 源换成 github 源进行拉取代码
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 0331c5dd6057106df5cb179e45d34966a3eafd1b
获取代码之后,进入 GececurbaiduhaldiFokeejukolu 文件夹,即可获取到源代码
设置窗口的override_redirect属性为True,以避免窗口管理器的干预,如此即可实现无边框
var valueMask =
0
| SetWindowValuemask.OverrideRedirect;
var xSetWindowAttributes = new XSetWindowAttributes
{
override_redirect = true, // 设置窗口的override_redirect属性为True,以避免窗口管理器的干预
};
var handle = XCreateWindow(Display, rootWindow, 100, 100, 1000, 500, 5,
32,
(int) CreateWindowArgs.InputOutput,
visual,
(nuint) valueMask, ref xSetWindowAttributes);
以上代码的 SetWindowValuemask.OverrideRedirect 十分重要,如果没有加上将会导致 override_redirect
设置无效
以上代码放在 github 和 gitee 上,可以使用如下命令行拉取代码
先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin dc1b79521e00300dfaef49d54226b6f687b25b3e
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码,将 gitee 源换成 github 源进行拉取代码
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin dc1b79521e00300dfaef49d54226b6f687b25b3e
获取代码之后,进入 GececurbaiduhaldiFokeejukolu 文件夹,即可获取到源代码
设置工具栏与 X11 窗口绘制的笔迹
获取 Avalonia 的 X11 窗口
if (TryGetPlatformHandle()?.Handle is { } handle)
{
}