ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:135.77KB ,
资源ID:11703093      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11703093.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(GTK+20杂项构件2.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

GTK+20杂项构件2.docx

1、GTK+20杂项构件2GTK+2.0-杂项构件(2)GTK+2.0 2008-12-13 12:51:20 阅读386 评论0 字号:大中小订阅 组合框GtkCombo G t k C o m b o (组合框)是极为常见的构件,实际上它仅仅是其他构件的集合。从用户的观点来说,这个构件是由一个文本输入构件和一个下拉菜单组成的,用户可以从一个预先定义的列表里面选择一个选项,同时,用户也可以直接在文本框里面输入文本。下面是从定义组合框构件的结构里面摘取出来的,从中可以看到组合框构件是由什么构件组合形成的:struct _GtkComboGtkHBox hbox;GtkWidget *entry;G

2、tkWidget *button;GtkWidget *popup;GtkWidget *popwin;GtkWidget *list;. ;可以看到,组合框构件有两个主要部分:一个输入框和一个列表。用下面的函数创建组合框构件:GtkWidget *gtk_combo_new( void );现在,如果想设置显示在输入框部分中的字符串,可以直接操纵组合框构件内部的文本输入构件:gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)-entry), My String.);要设置下拉列表中的值,可以使用下面的函数:void gtk_combo_set_popd

3、own_strings( GtkCombo *combo,GList *strings );在使用这个函数之前,先得将要添加的字符串组合成一个G L i s t链表。G l i s t是一个双向链表,是G l i b的一部分。要做的就是设置一个G l i s t指针,其值设为N U L L,然后用下面的函数将字符串追加到链表当中:GList *g_list_append( GList *glist,gpointer data );要注意的是:一定要将G l i s t链表的初值设为N U L L,必须将g _ l i s t _ a p p e n d函数返回的值赋给要操作的链表本身。下面是一

4、段典型的代码,用于创建一个选项列表:GList *glist=NULL;glist = g_list_append(glist, String 1);glist = g_list_append(glist, String 2);glist = g_list_append(glist, String 3);glist = g_list_append(glist, String 4);gtk_combo_set_popdown_strings( GTK_COMBO(combo), glist) ;到这里为止,你现在已经可以使用设置的组合框构件了。有几个行为是可以改变的。下面是相关的函数:void

5、gtk_combo_set_use_arrows( GtkCombo *combo,gint val );void gtk_combo_set_use_arrows_always( GtkCombo *combo,gint val );void gtk_combo_set_case_sensitive( GtkCombo *combo,gint val );g t k _ c o m b o _ s e t _ u s e _ a r r o w s ( )让用户用上/下方向键改变文本输入构件内的值。这并没有改变列表的值,只是用列表中的下一个列表项替换了文本输入框中的文本(向上则取上一个值,向

6、下则取下一个值)。这是通过搜索当前项在列表中的位置并选择前一项/下一项来实现的。通常,在一个输入框中方向键是用来改变焦点的(也可以用TA B键)。注意,如果当前项是列表的最后一项,按向下的方向键会改变焦点的位置(这对列表在第一项时按向上方向键也适用)。如果当前值并不在列表中,则不能使用g t k _ c o m b o _ s e t _ u s e _ a r r o w s ( )函数。同样地, g t k _ c o m b o _ s e t _ u s e _ a r r o w s _ a l w a y s ( )允许使用上/下方向键在下拉列表中选取列表项,但是它在列表项中循环,

7、也就是当列表项位于第一个表项时按向上方向键,会跳到最后一个,当列表项位于最后一个表项时按向下方向键,会跳到第一个。这样可以完全禁止使用方向键改变焦点。g t k _ c o m b o _ s e t _ c a s e _ s e n s i t i v e ( )函数切换G T K是否以大小写敏感的方式搜索其中的列表项。这一般用在内部文本输入构件中的文本查找组合框构件中的列表值。可以将其设置为大小写敏感或不敏感。如果用户同时按下“ A l t”和“Ta b”键,组合框构件还可以用来完成当前输入。注意,窗口管理器也要使用这种组合键方式,将会忽略G T K中这个组合键的使用。注意,我们使用的是

8、组合框构件,它能够为我们从一个下拉列表中选择一个选项。这一点是很直截了当的。大多数时候,你可能很关心怎样从其中的文本输入构件中获取数据。组合框构件内部的文本输入构件可以用G T K _ E N T RY ( G T K _ C O M B O ( c o m b o ) - e n t r y )访问。一般想要做的两件主要工作一个是连接一个a c t i v a t e,当用户按回车键时能够进行响应,另一个就是读出其中的文本。第一件工作可以用下面的方法实现:gtk_signal_connect(GTK_OBJECT(GTK_COMB(combo)-entry), activate,GTK_SI

9、GNAL_FUNC my_callback_function), my_data);可以使用下面的函数在任意时候取得文本输入构件中的文本:gchar *gtk_entry_get_text(GtkEntry *entry);具体做法如下:char *string;string = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)-entry);这就是取得文本输入框中字符串的方法。void gtk_combo_disable_activate(GtkCombo *combo);这个函数禁用组合框构件内部的文本输入构件( G t k E n t r y)的

10、a c t i v a t e信号。 日历构件GtkCalendarG t k C a l e n d a r (日历构件)显示一个月历视图,可以在上面方便地选择年份、月份和日期。这样,如果要做与日期相关的编程,不再需要考虑复杂的历法问题。日历构件本身外观也很漂亮,创建和使用都非常简单。同时,日历构件G t k C a l e n d a r不存在2 0 0 0年问题。如果要开发一个日程管理等类的软件,这个构件是一个很好的选择。创建日历构件的方法和其他构件的类似:GtkWidget *gtk_calendar_new();有时候,需要同时对构件的外观和内容做很多的修改。这时候可能会引起构件的多

11、次更新,导致屏幕闪烁。可以在修改之前使用一个函数将构件“冻结”,然后在修改完成之后再用一个函数将构件“解冻”。这样,构件在整个过程中只做一次更新。这个函数将构件“冻结”:void gtk_calendar_freeze( GtkCalendar *Calendar );这个函数将构件“解冻”:void gtk_calendar_thaw ( GtkCalendar *Calendar );这两个函数和其他构件(比如G t k Te x t)的冻结/解冻函数作用完全一样。日历构件有几个选项,可以用来改变构件的外观和操作方式。使用下面的函数可以改变这些选项:void gtk_calendar_di

12、splay_options( GtkCalendar *calendar,GtkCalendarDisplayOptions flags );函数中的f l a g s参数可以将下面的五种选项中的一个或者多个用逻辑位或( |)操作符组合起来:G T K _ C A L E N D A R _ S H O W _ H E A D I N G:这个选项指定在绘制日历构件时,应该显示月份和年份。G T K _ C A L E N D A R _ S H O W _ D AY _ N A M E S:这个选项指定用三个字母的缩写显示每一天是星期几(比如M O N、T U E等)。G T K _ C A

13、 L E N D A R _ N O _ M O N T H _ C H A N G E:这个选项指定用户不应该也不能够改变显示的月份。如果只想显示某个特定的月份,则可以使用这个选项。比如,如果在窗口上同时为一年的1 2个月分别设置一个日历构件时。G T K _ C A L E N D A R _ S H O W _ W E E K _ N U M B E R S:这个选项指定应该在构件的左边显示每一周在全年的周序号(一年是5 2个周,元月1日是第1周,1 2月3 1日是第5 2周)。G T K _ C A L E N D A R _ W E E K _ S TA RT _ M O N D A

14、Y:这个选项指定在日历构件中每一周是从星期一开始而不是从星期天开始。缺省设置是从星期天开始。此选项只影响日期在构件中从左到右的排列顺序。下面的函数用于设置当前要显示的日期:gint gtk_calendar_select_month( GtkCalendar *calendar,guint month,guint year );void gtk_calendar_select_day( GtkCalendar *calendar,guint day );g t k _ c a l e n d a r _ s e l e c t _ m o n t h ( )的返回值是一个布尔值,指示设置是否成

15、功。如果设置一个非法值,比如3 1月,则会返回一个FA L S E值。使用g t k _ c a l e n d a r _ s e l e c t _ d a y ( )函数,如果d a y参数指定的日期是合法的,会在日历构件中选中该日期。如果d a y参数的值是0,将清除当前的选择。除了可以选中一个日期以外,在一个月中可以有任意个日期被“标记”。被“标记”的日期会在日历构件中高亮显示。下面的函数用于标记日期和取消标记:gint gtk_calendar_mark_day( GtkCalendar *calendar,guint day);gint gtk_calendar_unmark_d

16、ay( GtkCalendar *calendar,guint day);void gtk_calendar_clear_marks( GtkCalendar *calendar);当前标记的日期存储在一个G t k C a l e n d a r结构的数组中。数组的长度是3 1,这样,要想知道某个特定的日期是否被标记,可以访问数值中相应的元素(注意,在C语言中,数值是从0开始编号的)。例如:GtkCalendar *calendar;calendar = gtk_calendar_new();. . ./* 当月7日被标记了吗? * /if (calendar-marked_date7-1)

17、/* 若执行此处的代码,表明7日已经被标记* /注意,在月份和年份变化时,被标记的日期是不会变化的。下面的函数用于取得当前选中的年/月/日值:void gtk_calendar_get_date( GtkCalendar *calendar,guint *year,guint *month,guint *day );使用这个函数时,需要先声明几个g u i n t类型的变量传递给函数的y e a r、m o n t h和d a y参数。所需要的返回值就存放在这几个变量中。如果将某一个参数设置为N U L L,则不返回该值。日历构件能够引发许多信号,用于指示日期被选中以及选择发生的变化。信号的意

18、义很容易理解。信号名称如下:month_changed 选 /择*月份变化* /day_selected 选 /择*日期变化* /day_selected_double_click 选 中/*日期并以鼠标双击* /prev_month 选 /择*前一月* /next_month 选 /择*下一月* /prev_year 选 /择*前一年* /next_year 选 /择*下一年* /下面是一个日历构件的示例,运用了上面介绍的各项特性。/* 日历构件示例开始calendar.c */#include #include #include #include #define DEF_PAD 10#de

19、fine DEF_PAD_SMALL 5#define TM_YEAR_BASE 1900typedef struct _CalendarData GtkWidget *flag_checkboxes5;gboolean settings5;gchar *font;GtkWidget *font_dialog;GtkWidget *window;GtkWidget *prev2_sig;GtkWidget *prev_sig;GtkWidget *last_sig;GtkWidget *month; CalendarData;enum c a l e n d a r _ s h o w _ h

20、 e a d e r ,c a l e n d a r _ s h o w _ d a y s ,calendar_month_change,c a l e n d a r _ s h o w _ w e e k ,c a l e n d a r _ m o n d a y _ f i r s t ;/ * GtkCalendar 日历构件* /void calendar_date_to_string( CalendarData *data,char *buffer,gint buff_len )struct tm tm;time_t time;memset (&tm, 0, sizeof (

21、tm);gtk_calendar_get_date (GTK_CALENDAR(data-window),&tm.tm_year, &tm.tm_mon, &tm.tm_mday);tm.tm_year -= TM_YEAR_BASE;time = mktime(&tm);strftime (buffer, buff_len-1, %x, gmtime(&time);void calendar_set_signal_strings( char *sig_str,CalendarData *data)gchar *prev_sig;gtk_label_get (GTK_LABEL (data-p

22、rev_sig), &prev_sig);gtk_label_set (GTK_LABEL (data-prev2_sig), prev_sig);gtk_label_get (GTK_LABEL (data-last_sig), &prev_sig);gtk_label_set (GTK_LABEL (data-prev_sig), prev_sig);gtk_label_set (GTK_LABEL (data-last_sig), sig_str);void calendar_month_changed( GtkWidget *widget,CalendarData *data )cha

23、r buffer256 = month_changed: ;calendar_date_to_string (data, buffer+15, 256-15);calendar_set_signal_strings (buffer, data);void calendar_day_selected( GtkWidget *widget,CalendarData *data )char buffer256 = day_selected: ;calendar_date_to_string (data, buffer+14, 256-14);calendar_set_signal_strings (

24、buffer, data);void calendar_day_selected_double_click( GtkWidget *widget,CalendarData *data )struct tm tm;char buffer256 = day_selected_double_click: ;calendar_date_to_string (data, buffer+27, 256-27);calendar_set_signal_strings (buffer, data);memset (&tm, 0, sizeof (tm);gtk_calendar_get_date (GTK_C

25、ALENDAR(data-window),&tm.tm_year, &tm.tm_mon, &tm.tm_mday);tm.tm_year -= TM_YEAR_BASE;if(GTK_CALENDAR(data-window)-marked_datetm.tm_mday-1 = 0) g t k _ c a l e n d a r _ m a r k _ d a y ( G T K _ C A L E N D A R ( d a t a - w i n d o w ) , t m . t m _ m d a y ) ; elseg t k _ c a l e n d a r _ u n m

26、a r k _ d a y ( G T K _ C A L E N D A R ( d a t a - w i n d o w ) , t m . t m _ m d a y ) ;void calendar_prev_month( GtkWidget *widget,CalendarData *data )char buffer256 = prev_month: ;calendar_date_to_string (data, buffer+12, 256-12);calendar_set_signal_strings (buffer, data);void calendar_next_mon

27、th( GtkWidget *widget,CalendarData *data )char buffer256 = next_month: ;calendar_date_to_string (data, buffer+12, 256-12);calendar_set_signal_strings (buffer, data);void calendar_prev_year( GtkWidget *widget,CalendarData *data )char buffer256 = prev_year: ;calendar_date_to_string (data, buffer+11, 2

28、56-11);calendar_set_signal_strings (buffer, data);void calendar_next_year( GtkWidget *widget,CalendarData *data )char buffer256 = next_year: ;calendar_date_to_string (data, buffer+11, 256-11);calendar_set_signal_strings (buffer, data);void calendar_set_flags( CalendarData *calendar )gint i;gint opti

29、ons=0;for (i=0;isettingsi)options=options + (1window)gtk_calendar_display_options (GTK_CALENDAR (calendar-window), options);void calendar_toggle_flag( GtkWidget *toggle,CalendarData *calendar )gint i;gint j;j = 0 ;for (i=0; iflag_checkboxesi = toggle)j = i;c a l e n d a r - s e t t i n g s j = ! c a

30、 l e n d a r - s e t t i n g s j ;c a l e n d a r _ s e t _ f l a g s ( c a l e n d a r ) ;void calendar_font_selection_ok( GtkWidget *button,CalendarData *calendar )GtkStyle *style;GdkFont *font;calendar-font = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG (calendar-font_dialog);if (calendar-window)f o n t = g t k _ f o n t _ s e l e c t i o n _ d i a l o g _ g e t _ f o n t ( G T K _ F O N T _ S E L E C T I O N _ D I A L O G ( c a l e n d a r - f o n t _ d i a l o g ) ) ;if (font)style = gtk_style_copy (gtk_widget_get_style (calendar

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1