学习使用GTK+ 4.GTK+常用物件及API(窗口)
2010-12-30 16:28
411 查看
学习使用GTK+ 4.GTK+常用物件及API(窗口)
最后的叶子学习使用GTK+
系列的第 5 篇 (本系列共6篇)
学习使用GTK+
学习使用GTK+ 0.概述
学习使用GTK+ 1.构建GTK+编译环境
学习使用GTK+ 2.GTK+“Hello World”——对GTK+运作机制的通俗介绍
学习使用GTK+ 3.使用GtkBuilder、界面设计器Glade和其他GTK+组件
学习使用GTK+ 4.GTK+常用物件及API(窗口)
学习使用GTK+ 5.GTK+常用物件及API(文本)
这一部分内容介绍有关GTK+常用窗口类物件的一些函数。如果对内容有疑问,请在下方留言,谢谢!
GTK+的窗口
窗口是GTK+最基本的物件之一,物件要被放在窗口里显示。GTK+里,常用的窗口包括顶级窗口(GtkWindow)、对话框(GtkDialog)和消息对话框(GtkMessageDialog)等。GTK+有关窗口的操作很多,绝大多数情况下可以满足自定义窗口的需求;但有时候还是不可避免要直接访问底层库GDK。要注意的
是,GdkWindow与GtkWindow有很大差异,GdkWindow指一个显示区域,每一个可显示的GTK+物件都对应一个GdkWindow,
阅读文档时两者不可混淆。
窗口类物件在Glade中得到了良好的支持,复杂的窗口建议直接用Glade创建。
简易消息对话框
消息对话框是最简易的窗口,如果还在Glade中创建的话,很麻烦且会使Glade文件变得更大。下面这些函数,可以快速创建一个窗口而不需要Glade。void gtk_show_info( gpointer window, const gchar* message, const gchar* title) { GtkWidget * dialog; dialog = gtk_message_dialog_new_with_markup( window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, message) ; gtk_window_set_title( GTK_WINDOW( dialog) , title) ; gtk_dialog_run( GTK_DIALOG( dialog) ) ; gtk_widget_destroy( GTK_WIDGET( dialog) ) ; } void gtk_show_error( gpointer window, const gchar* message, const gchar* title) { GtkWidget * dialog; dialog = gtk_message_dialog_new_with_markup( window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, message) ; gtk_window_set_title( GTK_WINDOW( dialog) , title) ; gtk_dialog_run( GTK_DIALOG( dialog) ) ; gtk_widget_destroy( dialog) ; } gint gtk_show_question( gpointer window, const gchar* message, const gchar* title) { gint i; GtkWidget * dialog; dialog = gtk_message_dialog_new_with_markup( window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, message) ; gtk_window_set_title( GTK_WINDOW( dialog) , title) ; i= gtk_dialog_run( GTK_DIALOG( dialog) ) ; gtk_widget_destroy( dialog) ; if ( i== GTK_RESPONSE_YES) return 1 ; else return 0 ; } void gtk_show_warning( gpointer window, const gchar* message, const gchar* title) { GtkWidget * dialog; dialog = gtk_message_dialog_new_with_markup( window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, message) ; gtk_window_set_title( GTK_WINDOW( dialog) , title) ; gtk_dialog_run( GTK_DIALOG( dialog) ) ; gtk_widget_destroy( dialog) ; } |
文件选择对话框
文件选择对话框同样可以不用Glade创建,而直接调用API方便地创建。下面的函数可以创建文件打开对话框和文件保存对话框。GtkWidget* gtk_show_file_add_filter( GtkWidget* dialog, const gchar * description, gchar * pattern) { GtkWidget * filter; filter= GTK_WIDGET( gtk_file_filter_new( ) ) ; gtk_file_filter_set_name( GTK_FILE_FILTER( filter) , description) ; gtk_file_filter_add_pattern( GTK_FILE_FILTER( filter) , pattern) ; gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( dialog) , GTK_FILE_FILTER( filter) ) ; return filter; } gchar* gtk_show_file_open( GtkWidget* parent_window, const gchar * title, const gchar * filters) { GtkWidget * dialog,* FF[ 16 ] ; gchar * filename, des[ 256 ] , pattern[ 64 ] ; long i, j, FFc= 0 ; dialog = gtk_file_chooser_dialog_new ( title, GTK_WINDOW( parent_window) , GTK_FILE_CHOOSER_ACTION_OPEN, /*GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,*/ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL) ; //filters for ( i= 0 ; i< strlen( filters) ; i++ ) { j= 0 ; while ( i< strlen( filters) && filters[ i] != '|' ) des[ j++ ] = filters[ i++ ] ; if ( j>= 256 ) break ; des[ j] = 0 ; j= 0 ; i++; if ( i>= strlen( filters) ) break ; while ( i< strlen( filters) && filters[ i] != '|' ) pattern[ j++ ] = filters[ i++ ] ; if ( j>= 64 ) break ; pattern[ j] = 0 ; FF[ FFc++ ] = gtk_show_file_add_filter( dialog, des, pattern) ; if ( FFc>= 16 ) break ; } if ( gtk_dialog_run ( GTK_DIALOG ( dialog) ) == GTK_RESPONSE_ACCEPT) { filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER ( dialog) ) ; gtk_object_destroy( GTK_OBJECT( dialog) ) ; return filename; } return NULL; } gchar* gtk_show_file_save( GtkWidget* parent_window, const gchar * title, const gchar * default_folder, const gchar * default_name, const gchar * filters) { GtkWidget * dialog,* FF[ 16 ] ; gchar * filename, des[ 256 ] , pattern[ 64 ] ; long i, j, FFc= 0 ; dialog = gtk_file_chooser_dialog_new ( title, GTK_WINDOW( parent_window) , GTK_FILE_CHOOSER_ACTION_SAVE, /*GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,*/ GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL) ; gtk_file_chooser_set_do_overwrite_confirmation ( GTK_FILE_CHOOSER ( dialog) , TRUE) ; if ( default_folder[ 0 ] != 0 ) gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER ( dialog) , default_folder) ; gtk_file_chooser_set_current_name ( GTK_FILE_CHOOSER ( dialog) , default_name) ; //filters for ( i= 0 ; i< strlen( filters) ; i++ ) { j= 0 ; while ( i< strlen( filters) && filters[ i] != '|' ) des[ j++ ] = filters[ i++ ] ; if ( j>= 256 ) break ; des[ j] = 0 ; j= 0 ; i++; if ( i>= strlen( filters) ) break ; while ( i< strlen( filters) && filters[ i] != '|' ) pattern[ j++ ] = filters[ i++ ] ; if ( j>= 64 ) break ; pattern[ j] = 0 ; FF[ FFc++ ] = gtk_show_file_add_filter( dialog, des, pattern) ; if ( FFc>= 16 ) break ; } if ( gtk_dialog_run ( GTK_DIALOG ( dialog) ) == GTK_RESPONSE_ACCEPT) { filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER ( dialog) ) ; gtk_widget_destroy ( dialog) ; return filename; } //destroy gtk_widget_destroy ( dialog) ; for ( i= 0 ; i< FFc; i++ ) gtk_object_destroy( GTK_OBJECT( FF[ i] ) ) ; return NULL; } |
gtk_show_file_save()建立一个文件保存窗口供用户选择文件,参数依次是母窗口、标题、默认文件夹、默认文件名、过滤器。
其中“过滤器”是一串字符,字符内用“|”分离,其形式像这样:文件类型名称1|对应通配符1|文件类型名称2|对应通配符2|……
使用GDK函数
GTK+提供好了丰富的功能,但也有缺陷——某些常用功能无法直接使用,需要访问GDK库。下面这个函数,用来确定窗口是不是处于全屏状态。gboolean gtk_window_is_fullscreen( GtkWindow* window) { return ( gdk_window_get_state( gtk_widget_get_window( GTK_WIDGET( window) ) ) & GDK_WINDOW_STATE_FULLSCREEN) == GDK_WINDOW_STATE_FULLSCREEN; } |
相关文章推荐
- 学习使用GTK+ 5.GTK+常用物件及API(文本)
- 学习总结-常用API:正则表达式的使用
- JAVA学习第三十九课(常用对象API)— Map集合及其子类对象(集合使用技巧)
- Elasticsearch——使用学习2(API常用参数)
- 学习win32 API开发7-在窗口中使用控件
- MYSQL数据库学习十三 使用MySQL常用函数
- 学习何时以及如何使用 POSIX AIO API
- 【基础学习】Android studio 常用快捷键使用说明
- Spring学习-29:Spring中的事务管理之事务开发常用API的详解
- 使用API创建窗口
- JavaSE学习总结第12天_API常用对象2
- JavaSE学习总结第14天_API常用对象4
- Web自动化框架LazyUI使用手册(7)--浏览器常用操作API
- win32的消息窗口使用 ---- 学习记录
- Hadoop学习之路(二十六)MapReduce的API使用(三)
- 学习win32 API开发2-走进Windows窗口程序开发
- java学习_常用API
- JAVA学习第二十九课(常用对象API)- String类
- 在VB中使用API关闭窗口
- lucene学习总结篇--lucene全文检索的基本原理和lucene API简单的使用