如何使用 C 中的 XLib for dwm 向窗口添加自定义标题栏和装饰

问题描述 投票:0回答:2

我想为 dwm 编写一个补丁,它将在窗口边框添加区域,我可以在其中放置标题和装饰(例如 关闭、隐藏、全屏按钮)。

Xlib 提供了很多可能的方法来实现这一点,但是我不确定其中一些是否可能。

到目前为止最简单的是:

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

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

  • 创建另一个始终绑定到其父端的窗口

  • 在窗口中绘制背景框作为“内边框”或“标题栏”

如果有多种解决方案,最好的解决方案是使用最少内存且运行速度最快的解决方案。

c xlib
2个回答
0
投票

这通常是通过创建一个比您请求的窗口稍大的窗口来完成的(例如,由窗口管理器),然后重新调整窗口的父级以使其成为您要在其中绘制框架的窗口的子窗口。然后,您可以设置一个剪辑区域,以排除绘画例程中孩子占据的区域,并在其上绘制边框、标题、按钮和您喜欢的所有内容。如果您愿意指定在所有绘画例程中不包括劣等品,则可以避免在孩子身上绘画。因此,剪辑区域会自动为您创建。

另一种(不推荐)方法是调整窗口大小来为框架分配空间,但这需要内部客户端代码知道框架正在使用的部分,我认为这不是你想要的。


0
投票

我为此做了一些事情。 https://github.com/drvptr/dwm-titlebar-patch 但也存在一些缺点: 如果窗口由于其自身的内部原因而改变大小,则标题栏不会更新渲染。您需要将标题栏渲染添加到处理函数中,或者进行一些更改。 另外,如果将标题栏移至屏幕的最底部,窗口将返回到屏幕区域。我不知道,也许从一开始就是这样。

© www.soinside.com 2019 - 2024. All rights reserved.