gtk_widget_realize函数的作用

gtk_widget_realize这个函数是用来创建该widget对应的GdkWindow和相关资源的。一般我们用不到这个函数,一般是在创建自定义的widget的时候,需要用到。

我们一般不需要使用这个函数的原因是:当我们调用gtk_widget_show_all函数的时候,就会自动调用这个函数。但是 Foundations of GTK+ Developing一书中提到,对于GtkEventBox,_show_all函数并不会调用realize,所以我们需要手动调用一次这个函数。而 且,调用这个函数之前,需要首先调用gtk_container_add这样类似的函数,这是因为GTK要确定eventbox要知道他的parent和 ancestor是谁。

这次写RTSP Player demo程序的时候,eventbox不是add到Top level的GtkWindow的,而是add到了一个GtkVBox中,用的是gtk_box_pack_start函数,我发现在调用了 gtk_box_pack_start之后,调用gtk_widget_realize在运行时会发生一个断言错误。去掉这句代码就好了,而且看起来也没 有什么问题。这样看来,是不是使用了gtk_box_pack_start函数的话,就不需要用gtk_widget_realize了呢?
posted @ 2011-04-05 10:24  super119  阅读(1038)  评论(0编辑  收藏  举报