鱼C论坛

 找回密码
 立即注册
查看: 2343|回复: 0

[技术交流] C语言GUI程序设计-GTK图文系列-显示部件

[复制链接]
发表于 2014-11-15 22:55:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 G0398 于 2014-11-15 22:57 编辑

这一讲主要讲解GTK中的显示部件,包括图片显示,文本显示以及托盘图标等。

效果图:
gtk_display_widget.png

托盘图标:
gtk_status_icon.png


例程:
#include <gtk/gtk.h>

int main(int argc,char *argv[ ])
{
    GtkWidget *window,*fixed;
    GtkWidget *label,*image,*progress,*spinner,*statusbar,*statusicon,*infobar,*infobar_label;
    guint contextid = 0;

    const gchar *img_file = "avatar.jpg";

    gtk_init(&argc,&argv);
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"hello fishc - DisplayWidget");
    gtk_widget_set_size_request(GTK_WIDGET(window),300,200);

    fixed = gtk_fixed_new();
    gtk_container_add(GTK_CONTAINER(window), fixed);

    label = gtk_label_new("G0398");
    gtk_fixed_put(GTK_FIXED(fixed), label, 200,20);

    image = gtk_image_new_from_file(img_file);
    gtk_fixed_put(GTK_FIXED(fixed), image, 10,20);

    progress = gtk_progress_bar_new();
    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), .5);
    gtk_fixed_put(GTK_FIXED(fixed), progress, 160,40);

    spinner = gtk_spinner_new();
    gtk_spinner_start(GTK_SPINNER(spinner));
    gtk_fixed_put(GTK_FIXED(fixed), spinner, 260,20);

    statusbar = gtk_statusbar_new();
    contextid = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "info");
    gtk_statusbar_pop(GTK_STATUSBAR(statusbar), contextid);
    gtk_statusbar_push(GTK_STATUSBAR(statusbar), contextid, "Information!");
    gtk_fixed_put(GTK_FIXED(fixed), statusbar, 0,180);
    gtk_widget_set_size_request(statusbar,80,-1);

    statusicon = gtk_status_icon_new_from_file(img_file);
    gtk_status_icon_set_tooltip_text(GTK_STATUS_ICON(statusicon),"GtkDisplay Demo v1.0");

    infobar = gtk_info_bar_new();
    infobar_label = gtk_label_new("This is a info bar and the type is GTK_MESSAGE_QUESTION");
    gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_INFO);
    gtk_box_pack_start(GTK_BOX(infobar), infobar_label, FALSE, FALSE, 0);
    gtk_fixed_put(GTK_FIXED(fixed), infobar, 0,120);

    gtk_widget_show_all(window);
    gtk_main();
}
GtkLabel
GtkLabel是GTK中的标签,可以用来显示文本,使用简单,只需在gtk_label_new函数中指定要显示的文本即可。

GtkImage
GtkImage是一个可以显示图片的部件,可以从文件,预设图标集,pixbuf,常用图标集等地方加载显示,这里使用的是gtk_image_new_from_file函数来加载一张图片。

GtkProgressBar
GtkProgressBar是一个进度条部件,用来显示任务执行的进度。默认情况下取值范围为0.0-1.0,这里可以设置一个范围之前的值作为当前进度值,通过gtk_progress_bar_set_fraction函数设置。

GtkSpinner
GtkSpinner是一个旋转的加载指示器,只是为了显示当前是加载状态而已,不能显示加载进度。
通过gtk_spinner_start函数启动。

GtkStatusBar
GtkStatusBar为状态栏部件,用来显示当前执行任务的状态,比如浏览器下面的状态栏会显示当前打开页面所加载的资源路径。
通过上下文描述文本获取一个上下文id,然后把要显示的信息入栈即可。gtk_status_bar_get_context_id函数用来获取一个上下文id,gtk_statusbar_push函数将要显示的文本放入状态栏数据栈中。

GtkStatusIcon
GtkStatusIcon是一个托盘图标。

这个图中的效果:

可以显示一个自定义的图标,和提示文本。含有一些信号通知可以注册,比如activated。

GtkInfoBar
这事一个显示消息的框,可以不同的类型以不同的背景作为强调。
由于它“继承”于GtkBox,所以可以把它当作GtkBox来添加子部件,这里在它内部添加一个标签,并且设置它的类型为GTK_MESSAGE_INFO。

所有可用的类型:
typedef enum {
  GTK_MESSAGE_INFO,
  GTK_MESSAGE_WARNING,
  GTK_MESSAGE_QUESTION,
  GTK_MESSAGE_ERROR,
  GTK_MESSAGE_OTHER
} GtkMessageType;
以及效果图:
gtk_info_bars.png

大家可以试下看。

好了,这一讲就简单的说这么多,下一讲讲解GTK中的文本、数值输入部件。



本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 23:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表