我只是想分享一下我是如何找到错误的解决方案的
没有实现类程序的定义
运行X/Motif C应用程序时.我发布这个是因为我在网上搜索时只发现了一个对此问题的引用,并且它没有包含任何解决方案.
我设法解决了这个问题,如果你再次遇到这个问题,我想分享我的发现(注意:我不是说我的解决方案总能解决这类错误).
问题
我在运行使用Motif和X Intrinsics工具包的简单C程序时发现了这个问题.
$ gcc -Wall -c push.c
$ gcc -Wall -o push push.o -lXt -lXm
$ ./push
Error: No realize class procedure defined
Run Code Online (Sandbox Code Playgroud)
C源代码如下:
#include <stdio.h>
#include <Xm/Xm.h>
#include <Xm/PushB.h>
/* Prototype Callback function */
void pushed_fn(Widget, XtPointer, XmPushButtonCallbackStruct *);
int main(int argc, char **argv)
{
Widget top_wid, button;
XtAppContext app;
Display* display;
XtToolkitInitialize();
app = XtCreateApplicationContext();
display = XtOpenDisplay(app, "localhost:10.0","push","push", NULL,0, &argc,argv);
top_wid = XtAppCreateShell(NULL, "Form", applicationShellWidgetClass, display, NULL, …Run Code Online (Sandbox Code Playgroud) 在我的Motif应用程序中(源代码在这里,需要Motif 2.1 +(-lXm -lXt -lX11)和C99兼容的编译器;在Cygwin上应另外链接-liconv),我正在尝试XFontSet从与编码无关的XLFD转换为实例(如-monotype-arial-medium-r-normal--*-90-*-*-p-0-*-*)被正确地扩展到多个单独的XFontStruct条目(...-iso8859-1,...-iso8859-5,...-iso10646-1等)相匹配的当前区域.
我发现在某些语言环境(en_US.UTF-8,ru_RU.ISO-8859-5)中,XFontSet扩展可以完美地工作,而在其他语言环境中(ru_RU.UTF-8,ru_RU)它不会(字体集中不适当的单个字体),导致除了Latin-1平面中的字符以外的字符呈现不正确.
问题:
libXt,libX11)作为主要嫌疑人?XFontSet)而不是常规字体(XFontStruct)显示文本标签而不依赖于Motif - 理想情况下使用Athena小部件集?libX11API,我的理解是否正确我应该尝试使用XmbDrawString()和XwcDrawString()系列函数?如果您有其他评论.代码,不直接回答上述问题,但可以帮助追踪问题 - 欢迎这些.
我特别感兴趣的是,无论当前的语言环境如何,都能正确显示Cyrillic,前提是:
这给我留下了以下语言环境列表:
ru_RU;ru_RU.ISO-8859-5 (应与ru_RU相同,但不是,见下文);ru_RU.KOI8-R;ru_RU.CP1251;ru_RU.UTF-8;en_US.UTF-8以及任何xx_YY.UTF-8 …FvwmButtons(fvwm窗口管理器的一个模块)具有Swallow功能,它将应用程序的窗口嵌入到面板中.
我必须使用Motif和Xlib做这样的事情.我想在我的应用程序中嵌入一个Xclock.我想我必须更改嵌入式应用程序的Window ID.
我怎样才能做到这一点?
我已经安装了X11
的MOTIF,一个简单的程序另存为hello.c。
有以下消息
,我可以从哪里获取X11 / intrinsic.h文件?
需要帮助来编译
我的系统:MX-16 Linux Debian Jessie / i386
码:
hans@mx1:~/Documents
$ cc push.c -o push -lXm -lXt -lX11
In file included from push.c:2:0:
/usr/include/Xm/Xm.h:59:27: fatal error: X11/Intrinsic.h: No such file or directory
#include <X11/Intrinsic.h>
^
compilation terminated.
hans@mx1:~/Documents
Run Code Online (Sandbox Code Playgroud) 我在X/Motif中开发了一个应用程序,它具有与工具包提供的标准拖放功能相关的性能问题.我已经通过设置XmDRAG_NONE资源在用户界面级别禁用了拖放协议:
这有效地禁用了拖放HMI标准功能,但每次窗口小部件(如XmText(或其他具有拖放功能)的窗口小部件由应用程序实例化时,继续在根窗口中创建与此功能相关的属性/原子'(在_MOTIF_DRAG_WINDOW中).
有没有办法强制完全禁用拖放?
如果没有,有没有办法安全地删除根窗口中的拖放属性/原子?
提前致谢.
我安装了Tk版本8.5.3,自8.5以来添加了引擎支持.不过,我不知道如何使用主题,默认的Motif只是丑陋:
我正在做一个关于将遗留GUI程序从Motif迁移到Gtk的项目.源代码很长(大约80k行).现在我有两个计划:
关于这两个计划,请给我一些建议.任何想法或想法也受到热烈欢迎.
我有一个20世纪90年代早期编写的遗留Motif应用程序(我无法在QT中重写UI,甚至无需经过耗时的安全评估即可广泛修改应用程序).这个应用程序曾经在AIX上运行,它在密集使用下运行了几个星期并且稳定了.我们现在已将其移植到Linux.在长时间持续的Beta测试期间,应用程序每周大约崩溃一次,并显示以下消息.
请求失败的错误:BadWindow(窗口参数无效)
失败请求的主要操作码:4(X_DestroyWindow)
我已经了解到,使用自定义X11错误处理程序可以忽略这些错误(默认的X11错误处理程序只打印错误消息并退出),如下所示:
http://motifdeveloper.com/tips/tip29.html
我已经实现了一个自定义X11错误处理程序,它忽略了BadWindow错误,如该文章所述.所以我的问题是:对于X11开发和X服务器的内部工作有更多了解的人可以告诉我BadWindow错误是否真的可以被忽略吗?
PS我将尝试通过在同步模式下运行我们的应用程序来进一步调试,但这很慢,因为我无法按需重现此错误.有关调试BadWindow错误的任何提示也将不胜感激.
在办公室,我们正在使用旧的GLX/Motif软件,该软件使用OpenGL的AccumulationBuffer实现抗锯齿以保存图像.我们的问题是Apple从其所有驱动程序中删除了AccumulationBuffer(从OS X 10.7.5开始),而某些Linux驱动程序(如Intel HDxxxx)也不支持它.
然后我想更新软件的抗锯齿代码,使其与大多数实际操作系统和GPU兼容,但保持生成的图像像以前一样漂亮(因为我们需要它们用于科学出版物).
SuperSampling似乎是最古老,质量最好的抗锯齿方法,但我找不到任何不使用AccumulationBuffer的SSAA示例.是否有不同的方法来实现OpenGL/GLX的SuperSampling ???
我试图将两个代码体集成到同一个进程中,每个进程以前都为各自的 GUI 工具包提供独立的事件循环——其中一个使用 Xt,另一个使用 Qt5。目的只是为了能够显示 Qt 子窗口,而不是像现在已经不复存在的 Qt/Motif 集成扩展那样实现完全集成。
我已经能够构建一个使用标准 Qt 事件循环运行的粗略原型,带有将 XCB 事件转换为 XEvents 的本机事件过滤器(使用 XESetWireToEvent + 其处理程序从 xEvents / X11 线格式转换)。然后它使用 XtDispatchEvent() 将这些 XEvent 直接分派到 Xt。此时,我可以运行该程序,并在同一个程序中创建 Xt/Motif 小部件和 Qt 小部件,使用菜单,绘制 2D 图形,并同时使用 Qt 和 Motif 小部件。
我遇到的问题是,在创建新的 Motif 对话框时会有很长的延迟。我已经将其追溯到 libXt 中的 _XtWaitForSomething(),最终归结为 X 服务器连接套接字上的 select() 或 poll()。对 _XtWaitForSomething() 的调用是 XtManageChild() 内部发生的窗口布局管理的结果。_XtWaitForSomething() 似乎正在检查事件队列中是否有待处理的事件。
我有几个问题:
当在同一个程序中同时使用 XCB 和 libX11 调用(使用 XCB 作为事件队列主控器)时,我是否可以期望来自经典 Xlib 的调用也能正常工作——例如通过 libX11 调用将事件发布到 XCB 事件队列,或者确定是否有通过旧的 libX11 调用在 XCB 事件队列中挂起的任何事件?
为什么 XtManageChild() 最终会阻塞 libXt 中的 _XtWaitForSomething()?看起来它可能正在等待几何更改事件。有趣的是,Qt 的平台层在单独的线程中读取 XCB …
我是C和Linux中GUI编程的新手,我很难用它.这似乎是一个相当简单/直接的事情,但我找不到任何谷歌搜索的答案.我想为窗口小部件添加背景颜色.XmNbackground似乎是我想要使用的,但是我不明白我设置的是什么,就像一个简单的蓝色,我怎么得到"蓝色"来设置XmNbackground颜色呢?