Chinaunix首页 | 论坛 | 博客
  • 博客访问: 465493
  • 博文数量: 88
  • 博客积分: 1677
  • 博客等级: 上尉
  • 技术积分: 667
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-03 22:17
文章分类

全部博文(88)

文章存档

2013年(1)

2012年(18)

2011年(69)

分类: 嵌入式

2011-11-25 17:28:06

1 构件的实现、映射

   从GtkWidget中继承的类称为构件,构件分为“有窗口构件”和“无窗口构件”两种。有窗口构件有一个与之相关联的GdkWindow,而无窗口构件没有,它们将被绘制在有窗口构件的窗口上。在构件中,只有窗口构件才能接收和处理事件。如果要处理无窗口构件所产生的事件,则必须将它们放到GtkEventBox中,通过从GtkEventBox中接收事件来实现。

构件要经过一系列与它们的GdkWindow相关的状态:

  1. 如果一个构件相应的GdkWindow被创建出来,则称为该构件被实现(realize)
  2. 构件只有在被实现后,它才对应一个窗口,构件的widget->window属性值才不等于NULL
  3. gtk_widget_realize函数可以用来实现一个构件。gtk_widget_unrealize函数则用来“取消对构件”的实现。当构件被实现时,如果它有父窗口,则其父窗口必须首先被实现。
  4. 如果在构件的GdkWindow上调用了gdk_window_show函数,则称该构件被映射了,这时该构件将在屏幕上被显示出来。要映射一个窗口,则该窗口必须首先被实现。
  5. gtk_widget_show:当一个构件调用了gtk_widget_show函数时,该构件将在顶层容器调用gtk_widget_show后被实现和映射(构件被实现和映射后就将显示在屏幕上)。 因而,一般情况下,应该最后对最高级别的构件 GtkWindow调用gtk_widget_show( )函数。否则,如果先显示高级别的构件,用户可能会看到窗口先出现在屏幕上,然后子构件一个一个显示在屏幕上。
  6. 顶层容器一旦调用了gtk_widget_show则该顶层容器就立刻被实现(realize)和映射(map)了,即:顶层容器在调用gtk_widget_show后会立刻被显示在屏幕上。

2 构件的显示

  1. gtk_widget_show:当一个构件调用了gtk_widget_show函数时,该构件将在顶层容器调用gtk_widget_show后被实现和映射(构件被实现和映射后就将显示在屏幕上)。 因而,一般情况下,应该最后对最高级别的构件 GtkWindow调用gtk_widget_show( )函数。否则,如果先显示高级别的构件,用户可能会看到窗口先出现在屏幕上,然后子构件一个一个显示在屏幕上。
  2. gtk_widget_show_all:显示指定容器内的所有构件。(注:如果容器内套有容器,则使用该函数显示最外层容器时,所有内层容器内的构件也将被显示出来)
  3. gtk_widget_hide用来隐藏一个构件
  4. gtk_widget_destroy:销毁一个构件,并产生一个destroy消息(该消息为被销毁的构件产生,当然由被销毁的构件处理了)。当一个容器构件被销毁时,在该容器内的其它构件也将被销毁
  5. gtk_widget_set_usize:用来设置所有构件的大小。如果用该函数指定的中宽度(高度)如果指定为0,则使用容器里头包含的构件宽度(高度)来生成容器的宽度(高度)
  6. 使用GTK+内的函数来创建构件时,返回的是创建好的构件的指针,而描述构件的数据则保存在数据段中(全局变量)。因此,即使在某个函数内创建了多个构件,在函数返回时,构件仍然存在(构件保存在数据段中)

3 构件的敏感性

    构件的敏感性即构件是否可用(enable,不可用的构件将被显示为灰色,且无法获得键盘输入焦点)
    gtk_widget_set_sensitive函数用来设置构件是否敏感,可以通过设置容器的敏感性来设置容器内所有构件的敏感性
    GTK_WIDGET_IS_SENSITIVE宏用来查询构件是否敏感

4 构件的类型转换

  1. GTK_BUTTON等类型转换宏的功能和相应的(GtkButton*)相同,程序中通常用它来进行强制类型转换,这样能使程序看起来比较亲切
  2. 某个Gtk数据类型具有哪些成员可以在DevHelp的properties页面中查询

类型转换宏

  1. GTK_OBJECT(object)
  2. GTK_WIDGET(widget)
  3. GTK_CONTAINER(container)
  4. GTK_SIGNAL_FUNC(func)
  5. GTK_WINDOW(window)
  6. GTK_BOX(box)
  7. G_CALLBACK:用于g_signal_connect中的回调函数的类型转换

5 默认构件

  • “默认构件”指的是在窗口内按回车后会选中的构件
  • GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_DEFAULT)宏用来将一个构件的GTK_CAN_DEFAULT标志位设为1
  • 只有当构件的GTK_CAN_DEFAULT标志为1时,才能使用gtk_widget_grab_default来将构件设置为默认构件

6 补充部分

1.gtk_"控件名"_new_with_label系列的函数的实现

  • 使用gtk_“控件名”_new来创建一个控件
  • 2 往新建立的控件中添加一个label控件

阅读(3075) | 评论(0) | 转发(0) |
0

上一篇:GtkWidget结构的定义

下一篇:glib库简介

给主人留下些什么吧!~~