有一个简单的办法实现窗体背景图片,就是使用绝对布局,在窗体中放一个图片控件作为背景,之后所有的控件使用绝对布局在窗体的位置。需要注意之后的控件需要在图片控件之后添加到窗体容器。否则就会被图片覆盖而不能显示。
效果:

代码示例
#include <gtk/gtk.h>
int main(int argc, char *argv[]) {
gtk_init(&argc, &argv);
GtkWidget *window;
GtkWidget *fixed;
GtkWidget *image;
GtkWidget *button;
// 创建窗口和固定布局
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), fixed);
// 创建图片部件
//image = gtk_image_new_from_file("d:/bg0.jpg");
// 创建缩放的图片部件
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file("d:/bg0.jpg", NULL);
GdkPixbuf *scaled_pixbuf = gdk_pixbuf_scale_simple(pixbuf, 400, 300, GDK_INTERP_BILINEAR);
image = gtk_image_new_from_pixbuf(scaled_pixbuf);
// 将图片部件放置在位置 (0, 0)
gtk_fixed_put(GTK_FIXED(fixed), image, 0, 0);
// 创建按钮
button = gtk_button_new_with_label("Button 111111");
gtk_fixed_put(GTK_FIXED(fixed), button, 10, 10); // 将文字部件放置在位置 (10, 10)
gtk_widget_show_all(window); // 显示所有部件
gtk_main(); // 运行主循环
return 0;
}