如何在 FLTK 中编写面板任务栏以在 Linux 系统上使用

Posted

技术标签:

【中文标题】如何在 FLTK 中编写面板任务栏以在 Linux 系统上使用【英文标题】:How do I write an panel task bar in FLTK for use on Linux systems 【发布时间】:2011-05-27 15:49:22 【问题描述】:

我需要用 C/C++ 编写一个小应用程序来实现一个面板任务栏,比如在桌面窗口(特别是 Linux 系统上的 xorg 桌面)顶部显示信息。我需要避免 GUI 编程的臃肿和陡峭的学习曲线。

我的研究指向 GTK+/GTKmm 或 FLTK。看起来 FLTK 可能更容易掌握,并且最有可能提供具有最少依赖关系的小型干净包。所以到目前为止,我的研究都是基于 FLTK 的。

我一直在做一些阅读,并且正在努力找出如何编写一个基本程序,该程序将创建一个狭窄的未装饰窗口,该窗口覆盖显示器的宽度,从而最大化其他应用程序不会掩盖它。到目前为止,我发现的 FLTK 教程(包括 FLTK 文档)仅实现了带有可在屏幕上移动的边框的标准窗口。

我想首先在 FLTK(或 GTK+/GTKmm)中编写一个简单的程序,该程序在屏幕上创建一个 20 像素深的条,其中包含“hello world”消息。该栏的区域将保留在其他程序可以访问的区域之外,以便最大化另一个应用程序不会隐藏“hello world”消息。我认为这与 WM_STRUT_PARTIAL 属性有关,但我在 FLTK 中找不到这方面的信息。

这样做部分是为了了解如何编写一个简单的 GUI 程序,部分是为了解决我的特定需求。

我正在寻找任何帮助/指导,让我朝着正确的方向开始。非常感谢。

【问题讨论】:

【参考方案1】:

starfry,我相信这不是一项简单的任务。问题是您的桌面(例如 GNOME2/Metacity)保留了该空间,并将其面板绘制在您想要放置栏的区域。 -

如果您真的希望您的托盘栏小程序基于FLTK,则您必须将其“嵌入”到 (GNOME) 小程序中。很久以前我用 SDL 应用程序做过类似的事情,但我怕我忘了怎么做。我想到的第一件事是使用某种方式从 GNOME 小程序中获取 XID,并以某种方式将其传递给它的 FLTK 部分,然后让 FLTK 完成剩下的工作......

当然,您可以使用其他桌面,例如KDE,或i3 或IceWM,它们都有自己处理托盘栏的方式(没有标准!)所以,请原谅我“法语” - 它将成为支持所有环境的 PITA...

如果我在GNOME,我会完全使用 GNOME/GTK 编写小程序。在这种情况下忘记 FLTK。这是我的建议。如果您以 KDE 为目标,请使用 KDE/QT 库(需要寻找 Plasma 小部件)。

但是,如果您仍然想使用 FLTK,请从 fltk::draw_into() 函数(在 FLTK 1.x 中可能称为 fl_draw_into())、fltk::xid() 和相关函数开始。

【讨论】:

如果这有什么不同的话,我实际上正在运行 OpenBox。 在这种情况下,我建议您首先研究如何为 OpenBox 编写托盘栏(如果可能的话)。恐怕我无能为力。 :(

以上是关于如何在 FLTK 中编写面板任务栏以在 Linux 系统上使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在1项标签栏控制器中制作顶部标签栏以在swift中显示多个视图控制器?

如何使用 FLTK 在 Windows、Mac OS X 和 Linux 中使窗口透明?

FLTK:绘制另一个图形时清除一个图形

编译 Qt 项目以在 Linux 系统上运行

角度材料自动完成 - 如何防止键盘输入以在建议面板中选择一个选项

FLTK 和连接字符的问题