【问题标题】:Cannot Modify GC in Xlib after call to XClearArea调用 XClearArea 后无法在 Xlib 中修改 GC
【发布时间】:2014-02-20 11:55:29
【问题描述】:

这是我的问题:

我使用XClearArea 来清除带有窗口背景像素图的屏幕区域。这具有图形上下文的前景色为黑色。

在调用XClearArea 之后,我尝试使用XDrawLine API 画一条线。这里我使用了一个前景为 RED 的 GC。

但是,我注意到对XDrawLine 的调用画了一条黑线。换句话说,XClearArea 不允许我将 Foreground 转换为 RED,尽管我在调用 XDrawLine 时明确指定了新的 GC。

谁能解释一下为什么会发生这种情况以及如何解决这个问题。

任何帮助将不胜感激。谢谢。

编辑:让我添加一些代码来显示我的问题。我正在尝试在绘图区域上实现一条线,该线可以使用键盘上的箭头键移动。这就是我想要做的:

  • 画一条线。
  • 点击线使其变为红色。
  • 使用箭头键将线条向左或向右移动。
  • 使用箭头键时,该行仍保持红色。

当使用箭头键时,我尝试使用XClearArea API 清除上一行,

XClearArea(XtDisplay(Widget,XtWindow(Widget),0, 0,WINDOW_WIDTH, WINDOW_HEIGHT, True);

背景 PIXMAP 具有前景黑色。

现在一旦完成,尝试使用XDrawLine 函数画一条线:

XDrawLine(XtDisplay(Widget, XtWindow(Widget),RED_GC,x1, y1,x2,y2);

这里我尝试使用可以将前景设置为 RED 的新 RED_GC。

但是,系统似乎仍以黑色为前景画一条线。

不幸的是,我必须使用 OpenMotif 窗口管理器来使用 Xlib。我不能使用 GTK/QT。

在此先感谢您的帮助。

【问题讨论】:

  • 显示更多代码。您是否考虑过使用 Gtk 或 Qt 之类的工具包?

标签: c linux xlib motif


【解决方案1】:

不知道在没有完整代码的情况下该告诉你什么,但是......

XtDisplay 调用只接受 1 个参数。

所以

XClearArea(XtDisplay(Widget,XtWindow(Widget),0, 0,WINDOW_WIDTH, WINDOW_HEIGHT, True);

应该是:

XClearArea(XtDisplay(Widget),XtWindow(Widget),0, 0,WINDOW_WIDTH, WINDOW_HEIGHT, True);

XDrawLine() 也一样

另外你最好打电话

XSetForeground (XtDisplay(Widget), YourGC, YourRedpixel);

设置前景。 (但也许你是……)

【讨论】:

  • 感谢您的回答保罗。通过调用 XSetForeground,我们试图修改主 GC。这可行,但问题是为什么我们不能在对 XDrawLine 的调用中使用新的 RED_GC 而不是必须修改现有 GC 的前景。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2022-07-03
  • 1970-01-01
相关资源
最近更新 更多