没有标题栏的简单窗口

simple window without titlebar

本文关键字:简单 窗口 标题栏      更新时间:2023-10-16

大家下午好!我一直在一个项目,需要一个基本的窗口没有标题栏。在网上浏览了一下之后,我看到了这篇帖子,创建了一个没有标题栏的窗口,回复提到了使用"_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太。任何帮助将不胜感激!

谢谢

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

#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;
}