日期:2014-05-16  浏览次数:20603 次

一个关于 gtk window 显示的问题,很奇怪
gtk 的 window 类型分为 TOPLEVEL 和 POPUP
但他们的显示却很不一样

如果一个window 的类型为POPUP,在window show 的时候,会同时把window上的其他部件全部显示出来
但如果一个window的类型为TOPLEVEL,在Window 显示的时候,会先有一下白屏现象,然后Window才显示出来,

我的问题是:
1. 如何让Toplevel 类型的window 显示的时候不发生白屏现象(像popup类型的window 一样,一下子就show 出来)

2. 如果一个window 的类型是Popup,如何让它一直保持在最上层(直到它接受到了关闭的命令)
  (下面一层是Toplevel window ,它有时候会跑到Popup window 的上面)
  (我试了 modal ,transient,keep above 都不行阿)

哪位高手能帮帮我,谢谢!

------解决方案--------------------
没有遇到过。帮顶一下。
------解决方案--------------------
不会,帮up
------解决方案--------------------
帮up
------解决方案--------------------
不会,帮up
------解决方案--------------------
我一般不用popup窗口,弹出窗口会接收不到有些信号(比如按键),你可以生成TOPLEVEL窗口,然后去除掉外边框,
gdk_window_keep_above可以让窗口一直保持在上层
------解决方案--------------------
学习 绑定 transient 用起来太麻烦了 。。。
------解决方案--------------------
up
------解决方案--------------------
不知道我这样理解是否是正确的,你的代码里,可能是类似这样的顺序显示窗体中的构件:
(1)gtk_widget_show(window);
(2)gtk_widget_show(vbox);
(3)gtk_widget_show(label);
(4)gtk_widget_show(button);
如果是这样,你最先显示的当然就是window了,所以你看见白色的背景。有两种办法可以解决:
(1)只使用一条语句显示所有构件,gtk_widget_show_all(window);
(2)将gtk_widget_show(window)调用方在显示了其它构件后。


至于popup和toplevel有这样的差别的本质原因,我还真没看见过有资料里介绍。不过我考虑可能是有两种原因:
(1)popup主要是弹出菜单使用,所以GTK+设计时考虑了使用缓存机制同时显示。
(2)popup不用显示复杂的窗体结构,所以map它时的时间比toplevel短。

也请高手指教。