【问题标题】:simple window without titlebar没有标题栏的简单窗口
【发布时间】:2015-09-30 10:44:49
【问题描述】:

大家下午好!我一直在做一个需要没有标题栏的基本窗口的项目。在网上浏览了一下之后,我看到了这篇帖子create window without titlebar,回复中提到了“_NET_WM_WINDOW_TYPE_DOCK”原子的使用。我尝试使用以下代码在我的项目中创建一个:

Display* d = fl_display;
XWindow w = XCreateSimpleWindow(d, RootWindow(d, fl_screen),
    0, 0,
    400, 100,
    0,
    0x000000, 0x000000);

Atom window_type = XInternAtom(d, "_NET_WM_WINDOW_TYPE", False);
long value = XInternAtom(d, "_NET_WM_WINDOW_TYPE_DOCK", False);
XChangeProperty(d, w, window_type, XA_ATOM, 32, PropModeReplace, (uchar*) &value, 1);

窗口确实显示了,但它仍然有一个标题栏。我在网上找到了其他几个资源,但我无法停止显示标题栏。我确实意识到引用的帖子正在使用 XCreateWindow,但原子也不应该在 XCreateSimpleWindow 上工作。任何帮助将不胜感激!

谢谢

【问题讨论】:

  • 还有老的_MOTIF_WM_HINTS。你用的是哪个窗口管理器?
  • 该项目实际上是 WM :) 我正在尝试构建一个 alt-tab 窗口来显示正在运行的窗口。我认为 DOCK 会更适合这项任务,对吧?
  • 那么...您正在窗口上绘制标题栏?修改您的 WM,使其尊重 _NET_WM_WINDOW_TYPE 提示而不绘制该标题栏? :)
  • 对不起 Leiaz,我今天一定工作太多了。我现在明白了,谢谢! :)

标签: c++ linux window xlib


【解决方案1】:

我已经对您的示例进行了一些扩展,以便能够对其进行测试,并且它对我有用 - 看看您的代码是否有任何有意义的差异。

#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>

int main(int argc, char **argv) {
  Display* d = XOpenDisplay(NULL);
  int s = DefaultScreen(d);
  Window w = XCreateSimpleWindow(d, RootWindow(d, s), 100, 100, 400, 100, 1,
                                 BlackPixel(d, s), WhitePixel(d, s));
  Atom window_type = XInternAtom(d, "_NET_WM_WINDOW_TYPE", False);
  long value = XInternAtom(d, "_NET_WM_WINDOW_TYPE_DOCK", False);
  XEvent e;
  XChangeProperty(d, w, window_type, XA_ATOM, 32, PropModeReplace, (unsigned char *) &value, 1);
  XMapWindow(d, w);
  while (1) {
    XNextEvent(d, &e);
    if (e.type == Expose) {
      XFillRectangle(d, w, DefaultGC(d, s), 20, 20, 10, 10);
    }
    if (e.type == KeyPress)
      break;
  }
  XCloseDisplay(d);
  return 0;
}

【讨论】:

  • 感谢 vukung 的帮助!我的演示有另外两个传统的测试窗口(标题栏、按钮等),如果我实现你的代码,所有的装饰都会从其他窗口消失,而且似乎把东西锁起来了。附加窗口似乎确实显示了。我对“d”和“s”变量使用不同的值。想法?
  • 在带有 KDE Plasma 5.14.1 和默认 WM 的 Ubuntu 19.04 上对我不起作用。而“_MOTIF_WM_HINTS”令人惊讶地完成了这项工作
猜你喜欢
  • 1970-01-01
  • 2011-07-20
  • 2013-03-04
  • 2011-07-27
  • 2019-03-13
  • 1970-01-01
  • 2013-08-05
  • 2015-08-19
  • 1970-01-01
相关资源
最近更新 更多