创建不带标题栏的窗口
Create window without title bar
我正试图使用c++在Arch Linux中为Openbox创建一个简单的面板,但我不知道如何从窗口中删除标题栏。
我正在用XCreateWindow(...)
创建窗口,这会提供一个大小正确的窗口,但它包含一个标题栏,无论我指定了什么偏移坐标,该窗口也会在屏幕的左上角打开。
我在这里读到,这两个问题可能都是由窗口管理器(Openbox)引起的,它覆盖了我在XCreateWindow(..., &window_attributes)
中指定的窗口属性。这可以通过添加window_attributes.override_redirect = True;
来解决,尽管这似乎对我没有任何帮助。当我尝试这个时,我得到了与以前完全相同的窗口。(我确实在这次更改后编译了文件。)
此外,我还阅读了Tint2(链接)的代码,这是Openbox的另一个面板。他们使用以下代码创建一个窗口:
XSetWindowAttributes att = { .colormap=server.colormap, .background_pixel=0, .border_pixel=0 };
p->main_win = XCreateWindow(server.dsp, server.root_win, p->posx, p->posy, p->area.width, p->area.height, 0, server.depth, InputOutput, server.visual, mask, &att);
我在他们的代码中看不到override_redirect
,所以我不确定他们是如何删除标题栏的。
作为附加信息,我认为值得一提的是我是如何执行脚本的:
/* The c++ file is saved as 'panel.cpp' */
$ gcc panel.cpp -lX11 -o panel
$ ./panel
此外,我正在通过VirtualBox运行Arch Linux,并将Windows 8作为主机。我不确定这是否会改变什么,但提起也无妨。
由于我找到了解决方案,我想如果其他人需要,我会在这里发布解决方案。
正如@JoachimPileborg提到的,我需要更改~/.config/openbox/rc.xml
中的Openbox设置。在<applications>
标签中,我添加了以下代码:
<application class="*">
<decor>no</decor>
<position force="no"></position>
</application>
class="*"
意味着所有应用程序都将遵循这些规则,您可以填写应用程序的类名。<decor>no</decor>
删除了标题栏,<position force="no"></position>
确保我自己的脚本能够处理定位。您也可以在此标记之后添加另一个<application>
标记,以对此规则进行例外处理。
此外,不再需要window_attributes.override_redirect = True;
。
更正确的方法是使用扩展窗口管理器提示。
这个想法是,你不告诉窗户经理如何装饰或不装饰你的窗户,你只需要用_NET_WM_WINDOW_TYPE
:指示窗户类型
Atom window_type = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False);
long value = XInternAtom(display, "_NET_WM_WINDOW_TYPE_DOCK", False);
XChangeProperty(display, your_window, window_type,
XA_ATOM, 32, PropModeReplace, (unsigned char *) &value,1 );
"Dock"是面板和任务栏的类型。通常,它们是未经修饰的,并出现在所有桌面上。正如文档中所写,以前_MOTIF_WM_HINTS
属性用于定义窗口的外观和装饰。窗口管理器仍然支持它,但_NET_WM_WINDOW_TYPE
更受欢迎,因为它描述了功能,并让窗口管理器(和用户)决定该类型窗口的外观和行为。
面板的另一个有趣属性是_NET_WM_STRUT_PPARTIAL,用于"保留"空间。
- WinAPI 检查窗口是否具有常规标题栏
- 无法在 GLFW 窗口标题中显示'ä'
- 为什么抓取窗口标题的代码会导致应用崩溃?
- 将窗口的样式从标准更改为没有标题栏和返回
- Qt - 防止在拖动标题栏时调整窗口大小
- 如何在RPi3上的交叉编译应用程序的主窗口上显示边框和标题栏
- 如何使用QT中的自定义标题栏移动窗口
- 窗口背景,如窗口 7 的标题栏
- 如何永久删除主窗口标题栏
- 你能用SDL在窗口中创建没有标题栏的窗口吗
- 如何在win32中在不覆盖标题栏的情况下围绕窗口绘制矩形
- 如何使qtwidget窗口的标题栏最小化
- WinAPI:创建可调整大小的窗口,没有标题栏,但有最小化/最大化/关闭按钮(如Firefox/Chrome/Opera
- 使用Win32打开一个没有标题栏的窗口
- 在OSX上浮动没有标题栏的GLUT窗口
- 没有标题栏的简单窗口
- 如何在Windows8中获取窗口标题栏(活动和非活动)的颜色
- 如何获取标题栏窗口控件的 RECT(最大化、最小化、关闭按钮)?我尝试制作自定义颜色标题栏
- 创建不带标题栏的窗口
- 移动窗口在mfcc++没有标题栏