Gtk3窗口背景图片 [英] Gtk3 window background image
本文介绍了Gtk3窗口背景图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我用C语言编写的GTK + -3.0.12(最新的稳定版本为2011年9月10日)
如何创建一个顶部窗口PNG格式的背景图像和静止地点的其他部件,如窗口上的按钮?我尝试以下,但图像绘制在按钮。
/ *
*用编译:
* GCC -Wextra -o cairo6`pkg配置--cflags --libs GTK + -3.0` cairo6.c
* /#包括LT&; GTK / gtk.h>
静态cairo_surface_t *表面= NULL;
cairo_surface_t *形象;静态gboolean
on_expose_event(* GtkWidget的部件,GdkEventExpose *事件,gpointer数据)
{
cairo_t * CR;
表面= gdk_window_create_similar_surface(gtk_widget_get_window(部件)
CAIRO_CONTENT_COLOR,
gtk_widget_get_allocated_width(部件)
gtk_widget_get_allocated_height(部件));CR = gdk_cairo_create(gtk_widget_get_window(GTK_WIDGET(部件)));
cairo_set_source_surface(CR,图像,0,0);
cairo_paint(CR);
cairo_destroy(CR);返回TRUE;
} INT主(INT ARGC,CHAR *的argv [])
{
* GtkWidget的窗口;
gtk_init(安培; ARGC,&安培; argv的);窗口= gtk_window_new(GTK_WINDOW_TOPLEVEL);
图像= cairo_image_surface_create_from_png(bdrop.png); //这里提供您自己的图像
g_signal_connect(窗口,消灭,G_CALLBACK(gtk_main_quit),NULL);
gtk_widget_set_app_paintable(窗口,FALSE);
gtk_window_set_position(GTK_WINDOW(窗口),GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(窗口),800,480);* GtkWidget的EBOX = gtk_event_box_new();
* GtkWidget的按钮;
按钮= gtk_button_new_with_label(退出);
gtk_widget_set_halign(GTK_WIDGET(按钮),GTK_ALIGN_CENTER);
gtk_widget_set_valign(GTK_WIDGET(按钮),GTK_ALIGN_CENTER);
gtk_container_add(GTK_CONTAINER(EBOX),按钮);
g_signal_connect(按钮,点击,G_CALLBACK(gtk_main_quit),NULL);gtk_container_add(GTK_CONTAINER(窗口),EBOX);
g_signal_connect(EBOX,画,G_CALLBACK(on_expose_event),NULL);gtk_widget_show_all(窗口);进入主循环();
cairo_surface_destroy(图片);
返回0;
}
解决方案
检查是否低于code会为你工作:
的#include< GTK / gtk.h>INT主(INT ARGC,CHAR *的argv [])
{
* GtkWidget的窗口;
* GtkWidget的布局;
* GtkWidget的形象;
* GtkWidget的按钮; gtk_init(安培; ARGC,&安培; argv的); 窗口= gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(窗口),290,200);
gtk_window_set_position(GTK_WINDOW(窗口),GTK_WIN_POS_CENTER); 布局= gtk_layout_new(NULL,NULL);
gtk_container_add(GTK_CONTAINER(窗口),布局);
gtk_widget_show(布局); 图像= gtk_image_new_from_file(/家/ my_background_image.jpg);
gtk_layout_put(GTK_LAYOUT(布局),图像,0,0); 按钮= gtk_button_new_with_label(按钮);
gtk_layout_put(GTK_LAYOUT(布局),按钮150,50);
gtk_widget_set_size_request(按钮,80,35); 函数g_signal_connect_swapped(G_OBJECT(窗口),消灭,
G_CALLBACK(gtk_main_quit),NULL); gtk_widget_show_all(窗口); 进入主循环(); 返回0;
}
I'm using C language in gtk+-3.0.12 (latest stable version as of 9/10/2011) How can I create a png background image on a top window and still place other widgets like buttons on the window? I tried the following but the image is drawn over the button.
/*
* Compile with:
* gcc -Wextra -o cairo6 `pkg-config --cflags --libs gtk+-3.0` cairo6.c
*/
#include <gtk/gtk.h>
static cairo_surface_t *surface = NULL;
cairo_surface_t *image;
static gboolean
on_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
cairo_t *cr;
surface = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
CAIRO_CONTENT_COLOR,
gtk_widget_get_allocated_width (widget),
gtk_widget_get_allocated_height (widget));
cr = gdk_cairo_create ( gtk_widget_get_window (GTK_WIDGET(widget)) );
cairo_set_source_surface (cr, image, 0, 0);
cairo_paint (cr);
cairo_destroy (cr);
return TRUE;
}
int main(int argc, char *argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
image = cairo_image_surface_create_from_png("bdrop.png"); //Supply your own image here
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_set_app_paintable(window, FALSE);
gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size (GTK_WINDOW(window), 800, 480);
GtkWidget *ebox = gtk_event_box_new ();
GtkWidget *button;
button = gtk_button_new_with_label("QUIT");
gtk_widget_set_halign (GTK_WIDGET(button),GTK_ALIGN_CENTER);
gtk_widget_set_valign (GTK_WIDGET(button),GTK_ALIGN_CENTER);
gtk_container_add (GTK_CONTAINER(ebox), button);
g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
gtk_container_add (GTK_CONTAINER(window), ebox);
g_signal_connect(ebox,"draw", G_CALLBACK (on_expose_event),NULL);
gtk_widget_show_all (window);
gtk_main();
cairo_surface_destroy (image);
return 0;
}
解决方案
Check if code below would work for you:
#include <gtk/gtk.h>
int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *layout;
GtkWidget *image;
GtkWidget *button;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 290, 200);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
layout = gtk_layout_new(NULL, NULL);
gtk_container_add(GTK_CONTAINER (window), layout);
gtk_widget_show(layout);
image = gtk_image_new_from_file("/home/my_background_image.jpg");
gtk_layout_put(GTK_LAYOUT(layout), image, 0, 0);
button = gtk_button_new_with_label("Button");
gtk_layout_put(GTK_LAYOUT(layout), button, 150, 50);
gtk_widget_set_size_request(button, 80, 35);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
这篇关于Gtk3窗口背景图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文