有没有办法通过单击关闭按钮来防止应用程序退出?以下代码仅隐藏最小化和最大化按钮,但不隐藏关闭按钮...
Atom window_type = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False); long value = XInternAtom(display, "_NET_WM_WINDOW_TYPE_TOOLBAR", False); XChangeProperty(display, window, window_type, XA_ATOM, 32, PropModeReplace, (unsigned char *) &value,1 );
我试图通过谷歌搜索有关覆盖 _NET_CLOSE_WINDOW 的内容,但找不到真正的...或从 xprop 中删除 _NET_WM_ACTION_CLOSE 的方法...
最佳答案
阅读ICCCM & EWMH .您可能需要数月(或数年)才能了解所有细节(以及与 X11 和 X protocols and architectures 的关系)。
理论上,您可以在原始 Xlib 中做您想做的事。但细节是如此复杂,你真的应该使用一些工具包,比如 Qt或 GTK (生命是短暂的),或者也许libSDL或 SFML .另见 this列表。
在协议(protocol)和 Xlib 级别掌握 X11 需要花费大量时间(相关文档有数千页)。你确定愿意花那个钱吗?
所以在原始 X11 级别编码就像在汇编程序中编码。今天没有人为真正的程序这样做,并且出于类似的原因(abstraction 的级别太低;需要关心的细节太多......)。
请注意,当前趋势是用 Wayland 替换 X .在 X11 中,您可能需要数年时间从头开始开发您的东西,到您成功时,X 就会过时了。顺便说一句,Qt 和 GTK 的最新版本了解 Wayland(因此相同的代码可以在 X11 和 Wayland 上运行)。
所以使用一些GUI toolkit 强>。它们是数百万行的怪物软件,并且有其复杂性的原因(另外,graphics cards 今天是非常复杂的硬件;另请参见 this 和 this )。它们使您能够禁用关闭窗口(因为它们知道所有 ICCCM 和 EWMH 详细信息)。
由于您使用 C++ 标记了您的问题,我强烈建议您使用 Qt(或者可能是 SFML)。 documentation of Qt非常好。
顺便说一句,您不清楚的问题看起来很奇怪(并且缺乏动机和背景)。看来您错误地假设您的应用程序是屏幕上唯一的应用程序,这与每个 windowing system 的理念背道而驰。 (本质上是多任务和多窗口,因此是多应用程序)。您应该将您的应用程序视为与其他 应用程序一起工作(例如 copy & paste ,如果不考虑多个 应用程序和多个 窗口,这是没有意义的涉及)。高级用户可以总是“终止”您的应用程序(例如使用 kill(1) 或 xkill )。您可能希望在窗口关闭时收到通知(例如,在发生这种情况时显示一些对话框)。您甚至不应该设计不可关闭的应用程序(这违反了所有编码和界面指南)。
关于c++ - xlib 防止关闭按钮退出应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49664567/