解析GTK Widget学习文档及案例实现

移动开发
GTK Widget学习文档及案例实现是本文要介绍的内容,主要是来了解并学习GTK Widget的应用及案例的实现,具体内容的实现来看本文详解。

GTK Widget学习文档及案例实现是本文要介绍的内容,主要是来了解并学习GTK Widget的应用及案例的实现,具体内容的实现来看本文详解。

一、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了呢?

二、GTK编程中如何准确获知当前widget的size

1、用gtk_widget_get_request_size/gtk_widget_size_request取出来的都是当初request的size,不是widget当前的size

2、使用gdk_drawable_get_size函数可以取出当前widget的size。注意,gdk_window_get_size函数有一样的效果,不过这个函数已经deprecated了。

还有一点,这个widget必须有window,像label, progressbar这些widget,他们是没有GdkWindow的(在Foundations of GTK+书中有描述,所以,像这样的widget如果要捕捉事件的话,要在他们下面套一个EventBox),虽然有window这个成员变量 (window这个成员变量定义在GtkWidget中,所以他们都有),但是他们的window这个成员变量,其实是他们的parent的window 变量(参看GtkWidget class手册中该成员变量的描述)。

OK,给出一段example代码,这段代码是一个eventbox,上面放了一个progressbar,取的是eventbox的size,其实也就是progressbar的size:

  1. // Get the size of eventbox   
  2. gint width, height;   
  3. gdk_drawable_get_size(GDK_DRAWABLE(eventbox->window), &width, &height); 

小结:解析解析GTK Widget学习文档及案例实现的内容介绍完了,希望通过GTK Widget应用内容的学习能对你有所帮助!

责任编辑:zhaolei 来源: 博客园
相关推荐

2011-09-08 11:18:53

Widget

2011-09-09 19:39:57

GTK Widget

2011-09-01 10:27:42

jQuery Mobi

2011-09-09 20:02:19

GTK Widget

2011-09-09 16:38:51

Android Wid源码

2011-09-09 19:23:52

Widget

2011-08-15 17:06:01

Objective-CNSLog

2011-08-31 10:37:06

MTK开发入门

2011-08-17 15:23:37

iPhone开发Objective-CCocoa Touch

2011-08-18 10:17:21

Xcode4Xcode

2011-09-08 15:40:45

Android Wid组件

2011-08-04 16:46:03

Objective-C 声明

2011-08-12 10:27:52

Objective-C对象

2011-09-07 14:25:53

Android Wid设计

2011-08-22 15:31:35

Objective-C协议

2011-09-07 14:20:42

Android Wid组件

2011-09-08 16:07:13

Widget配置文件

2011-09-09 10:19:13

2011-09-08 17:44:47

GTK Widget

2011-09-08 11:13:29

Widget
点赞
收藏

51CTO技术栈公众号