我如何添加一个自定义的标题栏和装饰到一个窗口使用XLib在C中的dwm

n9vozmp4  于 2023-05-28  发布在  其他
关注(0)|答案(1)|浏览(144)

我想为dwm写一个补丁,它将在窗口的边框上添加区域,在那里我可以放置标题和装饰(如关闭,隐藏,全屏按钮)。
Xlib提供了很多可能的方法来实现这一点,但我不确定其中一些是否可行。
到目前为止最简单的是:

  • 创建一个新窗口作为父窗口,并将目标窗口作为子窗口

如果不可能,我会尝试通过以下方式创建标题栏:

  • 创建另一个总是绑定到其父端的窗口

  • 在窗口中画一个背景框作为“内边框”或“标题栏”

如果有多个解决方案,最好的一个是使用最少内存和工作最快的一个。

qlzsbp2j

qlzsbp2j1#

这通常是通过创建一个比你请求的窗口大一点的窗口来完成的(例如,通过窗口管理器),然后重新设置你的窗口的父级,使之成为你要在其中绘制框架的窗口的子级。然后,您可以设置一个剪辑区域,以排除绘画例程中孩子要占用的区域,并在其上绘制边框,标题,按钮和您喜欢的所有内容。你可以避免在孩子身上画画,如果你愿意在所有的绘画程序中指定不包括劣等儿童。因此,将自动为您创建剪切区域。
另一种(不推荐)方法是调整窗口大小来为框架分配空间,但这需要内部客户端代码知道框架正在使用的部分,我认为这不是您想要的。

相关问题