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

问题描述 投票:3回答:2

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

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

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

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

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

问候,/谢尔盖

linux solaris x11 motif
2个回答
1
投票

尝试在XtManageChild之后调用XtRealizeWidget


1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.