【问题标题】:Xlib: window is created in wrong positionXlib:窗口创建在错误的位置
【发布时间】:2012-10-10 21:24:01
【问题描述】:

我有一个创建窗口的简单 xlib 程序。我认为它必须在屏幕的左上角显示窗口,因为我将 0, 0 传递给 XCreateSimpleWindow 函数,但它位于中上侧。为什么?

#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>     

int
main(int argc, char* argv[])
{
  Display* display;     
  int screen_num;       
  Window win;           
  unsigned int display_width,display_height;    
  unsigned int width, height;   
  char *display_name = getenv("DISPLAY");

  display = XOpenDisplay(display_name);
  screen_num = DefaultScreen(display);
  display_width = DisplayWidth(display, screen_num);
  display_height = DisplayHeight(display, screen_num);

  width = (display_width / 3);
  height = (display_height / 3);

  win = XCreateSimpleWindow(display, RootWindow(display, screen_num), 0, 0, width, height, 1, BlackPixel(display, screen_num), WhitePixel(display, screen_num));

  XMapWindow(display, win);

  XSync(display, False);

  while(1) { }    
}

【问题讨论】:

    标签: c xlib


    【解决方案1】:

    顶层窗口由窗口管理器放置(和尺寸),它可以做任何适合它的事情。通常尊重大小但不尊重位置(为了留出装饰的地方,为了尊重让工具栏保持清晰的放置策略,......)

    如果您希望您的请求得到尊重,请尝试使用不带窗口管理器的显示器(使用 VNC 或类似方法来获得这样的显示器,不要尝试像这样使用您的桌面)

    【讨论】:

    • 如何在没有窗口管理器的情况下运行它?我正在使用 VNC 连接到服务器。
    • 启动 VNC 服务器,然后终止窗口管理器可能是最简单的方法。正确设置 vnc 服务器的参数以便它使用不启动窗口管理器的临时启动脚本可能是应该做的事情。 (例如,将特殊名称传递给 vncserver -name 并在 xstartup 的 VNCDESKTOP 中检查它)。
    • 我禁用了窗口管理器并且它可以工作,但是没有窗口管理器我不能做任何事情,例如。我无法移动或调整窗口大小。有没有其他方法不禁用呢?
    • 决定窗口的放置位置是窗口管理器的工作。所以我不确定想要覆盖它是一个好的解决方案。在某些情况下它是正确的,IIRC 有一些属性可以放在窗口上,请查看 ICCCM。
    猜你喜欢
    • 2011-04-17
    • 1970-01-01
    • 2012-05-17
    • 2017-02-15
    • 1970-01-01
    • 2012-02-10
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多