调用 XClearArea 后无法修改 Xlib 中的 GC

标签 c linux xlib motif

这是我的问题:

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

在调用 XClearArea 之后,我尝试使用 XDrawLine API 绘制一条线。这里我使用前景为红色的 GC。

但是,我注意到对 XDrawLine 的调用绘制了一条黑线。换句话说,尽管在对 XDrawLine 的调用中明确指定了新的 GC,但 XClearArea 不允许我将前景变为 RED 。

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

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

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

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

当使用箭头键时,我尝试使用 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_GC,它可以将前景设置为红色。

但是,系统似乎仍然与前景为黑色划了一条线。

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

预先感谢您的帮助。

最佳答案

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

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);

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

关于调用 XClearArea 后无法修改 Xlib 中的 GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21907057/

相关文章:

linux - 使用 awk 计算数字的平均值

c - 如何在 XLib 中创建半透明的白色窗口

c - 为什么我设置xlib窗口背景透明失败?

c - 您需要使用 extern 来处理不完整的类型吗?

c - 如何在C中生成一次范围内的随机数?

linux - 设置创建包含网站的文件夹的权限

linux - 瓦拉文件导入

java - jni xlib 窗口句柄

c++ - 格式化值类型 float(编程语言 C/C++)

c - 将字符串文字作为定义为指针的函数参数传递