在Motif中构建按钮小部件的长滚动列表的正确方法是什么?

时间:2011-07-15 22:33:39

标签: linux solaris x11 motif

我正在处理需要加载并显示一长串条目的旧Motif应用程序(大约1500)。它通过xmFormWidgetClass创建和管理XtVaCreateManagedWidget()的实例,然后用一堆线性层次结构xmFrameWidgetClass->xmFormWidgetClass->xmFormWidgetClass->xmPushButtonWidgetClass填充它。每个PushButton都包含一个多行标签。当这个东西被填充时,它需要大量的CPU,它花费在X / Motif库中进行一些几何计算。添加新按钮的速度会非常快地降低。看起来在XtVaCreateManagedWidget()内部使用了O(N)算法。

如果我对XtUnrealizeWidget()的原始实例xmFormWidgetClass做了更好的事情。条目以几乎恒定的速度添加,但后来我无法找到显示我构建的整个事物的方法。 XtRealizeWidget()的原始实例的xmFormWidgetClass不会在窗口中呈现它。

我做错了什么?有没有办法填充层次结构,然后计算几何体并立即将其渲染到屏幕上?

重新设计应用程序是一种选择,但它是选项上的最后手段类型。

任何让我加入Motif图书馆的建议都将受到高度赞赏!

此致 /塞吉

2 个答案:

答案 0 :(得分:1)

尝试在XtManageChild后调用XtRealizeWidget

答案 1 :(得分:1)

尝试创建非托管的所有窗口小部件并将它们放在WidgetList上,然后调用XtManageChildren()。请参阅以下参考资料

http://www.s-and-b.su/syshlp/motif_guide/MotifProgGuide/Making_Widgets_Visible.html

每次管理单个窗口小部件时,都会调用父changed_managed过程。 XtManageChildren只调用一次changed_manage过程。这可能会有所帮助。