2016-12-30 83 views
2

我试图用code :: block创建ac应用程序,它使用Gtk 3作为图形库 这个版本的gtk与gtk 2有些不同,而不是很多教程或者在线可用的样本。我想使用一个名为GdkPixmap的类型,它允许在您的窗口中加载gif,之后我发现这个类型已经被弃用,并且已经从gtk新版本(3)中删除。从官方文档(从gtk2迁移到gtk3),我发现可以使用cairo函数来制作由GdkPixmap制作的作品,但我还没有找到如何更改和迁移。加载Git到Gtk 3窗口C C++

此代码建立在计算器是到窗口使用GTK2加载GIF的例子,这并不在gtk3编译器的工作说:误差未知类型名“GdkPixmap”

#include <gtk/gtk.h> 
#include <stdio.h> 
#include <stdlib.h> 

GdkPixbuf *load_pixbuf_from_file (const char *filename) 
{ 
    GError *error = NULL; 
    GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (filename, &error); 

    if (pixbuf == NULL) 
    { 
     g_print ("Error loading file: %d : %s\n", error->code, error->message); 
     g_error_free (error); 
     exit (1); 
    } 
    return pixbuf; 
} 

GdkPixbufAnimation *load_pixbuf_animation_from_file (const char *filename) 
{ 
    GError *error = NULL; 
    GdkPixbufAnimation *pixbuf = gdk_pixbuf_animation_new_from_file (filename, &error); 

    if (pixbuf == NULL) 
    { 
     g_print ("Error loading file: %d : %s\n", error->code, error->message); 
     g_error_free (error); 
     exit (1); 
    } 
    return pixbuf; 
} 

int main (int argc, char **argv) 
{ 
    GtkWidget *window = NULL; 
    GdkPixbuf *image = NULL; 
    GdkPixbufAnimation * anim = NULL; 
    GtkWidget *widget = NULL; 
    GdkPixmap *background = NULL; 
    GtkStyle *style = NULL; 

    gtk_init (&argc, &argv); 
    /* Load a non animated gif */ 
    image = load_pixbuf_from_file ("C://Users//Pcc//Downloads//66.gif"); 
    // widget = gtk_image_new_from_pixbuf (image); 
    gdk_pixbuf_render_pixmap_and_mask (image, &background, NULL, 0); 
    style = gtk_style_new(); 
    style->bg_pixmap [0] = background; 
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_title (GTK_WINDOW(window), "Load Image"); 
    gtk_window_set_default_size (GTK_WINDOW (window), 400, 300); 
    gtk_widget_set_style (GTK_WIDGET(window), GTK_STYLE (style)); 
    gtk_window_set_transient_for (GTK_WINDOW (window), NULL); 

    GtkWidget *hbox = NULL; 
    hbox = gtk_hbox_new (0, FALSE); 
    gtk_container_add (GTK_CONTAINER(window), hbox); 

    GtkWidget *button = NULL; 
    button = gtk_button_new_with_label ("Sonic"); 
    gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); 

    gtk_widget_show_all (window); 
    gtk_main(); 
    return 0; 
} 

使用和安装一个过时的GTK我不认为是好的 请发布适用于gtk3的加载gif的代码示例

回答