【问题标题】:X window always blankX 窗口总是空白
【发布时间】:2013-05-25 23:12:41
【问题描述】:

我正在学习 X 窗口编程并在这里尝试一个演示程序:

http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/simple-drawing.c

这是使用 Xlib 库进行基本图形编程的一个示例代码;该教程的链接是http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html

问题是上面的演示在我的电脑中总是空白。程序应该在屏幕上显示一些基本形状,但在我的电脑中,窗口完全是白色的。我使用的是 Ubuntu 13.04。我通过 gcc simple-drawing.c -o draw -lX11 编译上面的代码

关于Xcreatewindow()的另一个问题:我通过设置x = 200, y = 200来指定XCreatewindow(display, parent, x, y, width, height, border_width, depth, class, visual, valuemask, attributes)的原点,但窗口仍然显示在我的显示器的左上角。 XCreatewindow() 中的 x 和 y 指的是什么?

【问题讨论】:

  • 关于你的第二个问题:见this
  • 您可能想提前一点,尝试来自同一站点的“事件”演示。如果可行,请尝试将其重绘代码调整到其他演示。大多数 X11 教程的简单方法“让我们先画一些图,然后再讨论事件”在现代环境中可能行不通,而且它从来都不是什么好东西,所以你不妨跳过那个阶段。

标签: x11


【解决方案1】:

这和this one一样的问题

由于某种原因,XFlushXSync 的行为与您的预期不同。

解决方案是等待暴露事件然后绘制形状。所以之后

  /* allocate a new GC (graphics context) for drawing in the window. */
  gc = create_gc(display, win, 0);
  XSync(display, False);

在主添加

  /* catch expose events */
  XSelectInput(display, win, ExposureMask);

  /* wait for the expose event */
  XEvent ev;
  XNextEvent(display, &ev);

对于你的另一个问题,创建窗口中的X和Y是屏幕左上角的起始坐标(原点),而不是放置窗口的位置,由窗口管理器确定。

【讨论】:

    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2022-08-16
    • 2012-02-26
    • 1970-01-01
    相关资源
    最近更新 更多