GTK+2.0-----构件定位 (2).doc

上传人:汽*** 文档编号:545958006 上传时间:2023-02-13 格式:DOC 页数:14 大小:192.51KB
返回 下载 相关 举报
GTK+2.0-----构件定位 (2).doc_第1页
第1页 / 共14页
GTK+2.0-----构件定位 (2).doc_第2页
第2页 / 共14页
GTK+2.0-----构件定位 (2).doc_第3页
第3页 / 共14页
GTK+2.0-----构件定位 (2).doc_第4页
第4页 / 共14页
GTK+2.0-----构件定位 (2).doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《GTK+2.0-----构件定位 (2).doc》由会员分享,可在线阅读,更多相关《GTK+2.0-----构件定位 (2).doc(14页珍藏版)》请在金锄头文库上搜索。

1、GTK+2.0-构件定位GTK+2.0 2008-12-13 10:25:20 阅读263 评论0 字号:大中小订阅 构件的显现、映射和显示 构件可以按它们是否有G d k Wi n d o w窗口分类。有两种G t k +构件,一种有一个相关联的G d k Wi n d o w窗口,另一种没有。大多数构件都有一个相关联的G d k Wi n d o w窗口,构件就绘制在这个窗口上。这里的G d k Wi n d o w窗口和G t k +里的G t k Wi n d o w窗口是不一样的。G d k Wi n d o w不是一个用户可见的对象,而是一个X服务器用于划分屏幕的抽象概念。一个G

2、d k Wi n d o w窗口,对X服务器给出了关于将要显示的图形的结构信息。因为X窗口系统是网络透明的,有可能X窗口的显示位置和X服务器不在同一台机器上,这样有助于减少网络流量。G t k Wi n d o w是一个窗口构件,它是一个用户可见的对象。 还有一些构件,比如说G t k L a b e l构件,没有与之相关联的G d k Wi n d o w;它们被称为“无窗口构件”,并且是相对轻量级的。没有相关联窗口的构件绘制在它的父构件的G d k Wi n d o w窗口上。一些操作,例如捕获一个事件,要求有一个G d k Wi n d o w窗口,因此不能在无窗口构件上做这些操作。构件

3、要经过一系列与它们的G d k Wi n d o w相关的状态:? 如果一个构件相应的G d k Wi n d o w被创建出来,称为该构件被显现( r e a l i z e)。用g t k _ w i d g e t _ r e a l i z e ( )函数显现一个构件,用g t k _ w i d g e t _ u n r e a l i z e ( )函数反显现(u n r e a l i z e d)构件。因为X窗口必须有一个父窗口,如果一个构件已经显现,它的父窗口也必然已显现。? 如果在构件的G d k Wi n d o w上调用了g d k _ w i n d o w _ s

4、 h o w ( )函数,称为该构件被映射( m a p)了。这意味着服务器已经要求在屏幕上显示这个构件的G d k Wi n d o w窗口。很明显,G d k Wi n d o w窗口必须存在,就是说,被映射的构件必然已被显现。? 如果当一个构件的父构件被映射时,它也被映射到屏幕上,这个构件就是可见的。这意味着已经对该构件调用了g t k _ w i d g e t _ s h o w ( )函数。通过调用g t k _ w i d g e t _ h i d e ( )函数,一个构件可以绘制为不可见的,这或者是取消未决的映射(已经确定了映射的时间,但还未映射),或者反映射该构件(隐藏它的

5、G d k Wi n d o w窗)。因为顶级构件没有父构件,当它们一显示,它们同时就被映射了。在典型的用户代码中,只需调用g t k _ w i d g e t _ s h o w ( )函数。这暗含当它的父构件一旦被显现和映射,该构件就被显现和映射。要理解的是: g t k _ w i d g e t _ s h o w ( )函数并不会立即生效,这一点很重要,它仅仅是确定构件被显示出来的时间。也就是说,不用担心显示构件的顺序(不必一定要先显示子构件,再显示父构件)。但是,这时还不能立即访问这个构件的G d k Wi n d o w窗口。有时,又确实需要在映射之前访问构件的G d k Wi

6、 n d o w窗口;在这样的情况下,要手工调用g t k _ w i d g e t _ r e a l i z e ( ) 函数来创建这个G d k Wi n d o w。如果机会适当,g t k _ w i d g e t _ r e a l i z e ( )函数还会显现构件的父构件。使用g t k _ w i d g e t _ r e a l i z e ( )函数的情况是不多见的,如果感觉到一定要这么做时,也许是使用了不正确的方法。上面介绍了创建构件的过程。销毁构件自动地将以上事件的整个次序倒过来,递归取消子构件和构件本身的显现。正如上面所提到的,对构件调用g t k _ w i

7、 d g e t _ s h o w ( )函数之后,构件并不一定会显示。只有当构件的所有父构件(直到最高级别的父构件)全部显示之后,它才会显示。因而,一般情况下,应该最后对最高级别的构件G t k Wi n d o w调用g t k _ w i d g e t _ s h o w ( )函数。否则,如果先显示高级别的构件,用户可能会看到窗口先出现在屏幕上,然后子构件一个一个显示在屏幕上。用户或许会觉得你的程序不够专业,甚至不正确。下面是显现、映射和显示构件的相关函数。函数列表: 显示/映射/显现构件#include /* 显现一个构件,创建该构件的G d k W i n d o w * /v

8、oid gtk_widget_realize(GtkWidget* widget)/* 反显现构件,销毁该构件的GdkWindow*/void gtk_widget_unrealize(GtkWidget* widget)/ *映射构件,构件的G d k W i n d o w显示在窗口上*/void gtk_widget_map(GtkWidget* widget)/ *反映射构件,隐藏构件的G d k W i n d o w。注意,构件的G d k W i n d o w还存在*/void gtk_widget_unmap(GtkWidget* widget)/ *显示构件,当构件的父构件

9、(向上递归直到最高级别构件)显示时,*构件将显示在屏幕上,*/void gtk_widget_show(GtkWidget* widget)/ *隐藏构件,构件的G d k W i n d o w依然存在*/void gtk_widget_hide(GtkWidget* widget)其他的构件概念本节介绍了几个其他与G t k Wi d g e t基类相关的概念,其中包括敏感性、焦点以及构件状态。1. 敏感性构件可以是敏感或不敏感的,不敏感的构件不能对输入进行响应。一般不敏感的构件是灰色的,不能接收键盘焦点。用g t k _ w i d g e t _ s e t _ s e n s i t

10、 i v e ( )函数改变构件的敏感度。函数列表: 改变敏感度#include / *设置构件的敏感性, w i d g e t参数是要设置的构件, s e t t i n g设置为T R U E时,*构件是敏感的,s e t t i n g设置是F A L S E时,构件不敏感* /void gtk_widget_set_sensitive(GtkWidget* widget,gboolean setting)构件缺省是敏感的。只有构件的所有容器是敏感的,构件才能是敏感的。也就是,可以通过设置容器的敏感性来让整个容器内的构件敏感(或不敏感)。构件“真正的”敏感性,包括它的父构件的状态,可以

11、用G T K _ W I D G E T _ I S _ S E N S I T I V E ( )宏测试。构件本身的敏感性,只与构件的父构件的敏感性有关,可以用G T K _ W I D G E T _ S E N S I T I V E ( )宏来查询。宏列表:敏感性#include GTK_WIDGET_IS_SENSITIVE(widget)GTK_WIDGET_SENSITIVE(widget)2. 焦点某个时候,在一个顶级窗口中某个构件可能具有键盘焦点。顶级窗口接收到的任何键盘事件都被发送到这个构件。这一点很重要,因为在键盘上击键应该只有唯一的一种效果,例如,只能更改一个文本输入区

12、域。大多数构件在具有焦点时,会有一个视觉的指示。当使用缺省的G t k +主题(T h e m e)时,典型情况下,有焦点的构件有一个细黑框环绕着。用户可以用方向键或Ta b键在构件之间移动焦点。当用户用鼠标点击构件时,焦点也会移过去。对键盘导航来说,焦点的概念是很重要的。例如,按下回车键或空格键会“激活”许多具有焦点的构件;可以用Ta b键在按钮之间移动,按下空格键激活这个按钮。3. 独占构件能够从其他构件中独占( g r a b)鼠标指针和键盘。所谓独占,就是构件是“模态”的,用户只能向这个构件中输入字符,键盘焦点也不能改变到其他构件。独占输入的一个典型理由是:创建一个模态对话框时,如果窗

13、口是独占的,则不能与其他的窗口交互。注意,还有另外一个G d k级的“独占”。G d k键盘和鼠标指针的独占发生在X服务器范围内,也就是,其他应用程序不能接收到键盘和鼠标事件。构件独占是一个G t k +概念,它只独占同一个应用程序中的其他构件的事件。4. 缺省每个窗口至多有一个缺省构件。例如,典型情况下,对话框都有一个缺省按钮,当用户按回车键时,相当于点击了这个按钮。5. 构件状态构件的状态值决定了它们的外观:? Normal:就是正常该有的样子。? Active:例如,按钮正被按下,或检查按钮(check box)正被选中。? P r e l i g h t:鼠标指针越过一个构件(典型情况

14、,按下会有一些效果)。例如,当鼠标越过按钮时,按钮会“高亮显示”。? Selected:构件是在一个列表中,或者是在其他类似状态,当前它是被选中的。? Insensitive:构件是“灰色”的,不活动的,或者不响应。它不会对输入响应。状态的准确含义及其视觉表达依赖于特定构件以及当前窗口管理器的主题( T h e m e)。可以用G T K _ W I D G E T _ S TAT E ( )宏存取构件的状态。这个宏返回以下几种常量之一:G T K _ S TAT E _ N O R M A LG T K _ S TAT E _ A C T I V EG T K _ S TAT E _ P R

15、 E L I G H TG T K _ S TAT E _ S E L E C T E DG T K _ S TATE_INSENSITIVE.宏列表:状态存取函数#include G T K _ W I D G E T _ S T A T E ( w i d g e t )构件的类型转换在G T K中,所有构件的存储形式都是G t k Wi d g e t,但是许多函数都需要指向某种构件类型(比如G t k B u t t o n)的指针作为参数。虽然所有的构件都是从G t k Wi d g e t派生而来的,但是编译器并不能理解这种派生和继承关系。为此, G T K引进了一套类型转换系统。这些类型转换都是通过宏实现的。这些宏测试给定数据项的类型转换能力,并实现类型转换。下面几个宏是经常会碰到的:G T K _ W I D G E T ( w i d g e t )G T K _ O B J E C T ( o b j e c t )G T K _ S I G N A L _ F U N C ( f u n c t i o n )G T K _ C O N TA I N E R ( c o n t a i n e r )G T K _ W I N D O W ( w i n d o w )G T K

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号