GTK+构件

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控件

from:http://blog.chinaunix.net/uid-25547034-id-3027894.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值