我正在处理需要加载并显示一长串条目的旧Motif应用程序(大约1500)。它通过xmFormWidgetClass
创建和管理XtVaCreateManagedWidget()
的实例,然后用一堆线性层次结构xmFrameWidgetClass->xmFormWidgetClass->xmFormWidgetClass->xmPushButtonWidgetClass
填充它。每个PushButton
都包含一个多行标签。当这个东西被填充时,它需要大量的CPU,它花费在X / Motif库中进行一些几何计算。添加新按钮的速度会非常快地降低。看起来在XtVaCreateManagedWidget()
内部使用了O(N)算法。
如果我对XtUnrealizeWidget()
的原始实例xmFormWidgetClass
做了更好的事情。条目以几乎恒定的速度添加,但后来我无法找到显示我构建的整个事物的方法。 XtRealizeWidget()
的原始实例的xmFormWidgetClass
不会在窗口中呈现它。
我做错了什么?有没有办法填充层次结构,然后计算几何体并立即将其渲染到屏幕上?
重新设计应用程序是一种选择,但它是选项上的最后手段类型。
任何让我加入Motif图书馆的建议都将受到高度赞赏!
此致 /塞吉
答案 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过程。这可能会有所帮助。