GTK进阶学习:设置窗口背景图(可指定其大小)

设置窗口背景图(可指定其大小):

#include <gtk/gtk.h>

/* 功能:  设置背景图
 * widget: 主窗口
 * w, h:   图片的大小
 * path:  图片路径
 */
void chang_background(GtkWidget *widget, int w, int h, const gchar *path)
{
	gtk_widget_set_app_paintable(widget, TRUE);		//允许窗口可以绘图
	gtk_widget_realize(widget);	

	/* 更改背景图时,图片会重叠
	 * 这时要手动调用下面的函数,让窗口绘图区域失效,产生窗口重绘制事件(即 expose 事件)。
	 */
	gtk_widget_queue_draw(widget);

	GdkPixbuf *src_pixbuf = gdk_pixbuf_new_from_file(path, NULL);	// 创建图片资源对象
	// w, h是指定图片的宽度和高度
	GdkPixbuf *dst_pixbuf = gdk_pixbuf_scale_simple(src_pixbuf, w, h, GDK_INTERP_BILINEAR);

	GdkPixmap *pixmap = NULL;

	/* 创建pixmap图像;
	 * NULL:不需要蒙版;
	 * 123: 0~255,透明到不透明
	 */
	gdk_pixbuf_render_pixmap_and_mask(dst_pixbuf, &pixmap, NULL, 128);
	// 通过pixmap给widget设置一张背景图,最后一个参数必须为: FASLE
	gdk_window_set_back_pixmap(widget->window, pixmap, FALSE);

	// 释放资源
	g_object_unref(src_pixbuf);
	g_object_unref(dst_pixbuf);
	g_object_unref(pixmap);
}

int main( int argc, char *argv[])
{
	gtk_init(&argc, &argv);

	//主窗口操作
	GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

	gtk_window_set_title(GTK_WINDOW(window), "设置窗口背景图");
	gtk_widget_set_size_request(window, 500, 450);

	chang_background(window, 500, 400, "image.jpg");	// 设置窗口背景图

	gtk_widget_show_all(window); // 显示所有部件

	gtk_main();

	return 0;
}

程序运行效果图如下:

源代码下载请点此处。

时间: 2024-10-10 09:08:17

GTK进阶学习:设置窗口背景图(可指定其大小)的相关文章

GTK进阶学习:GTK实现截图功能( 可以指定截图范围 )

按按钮截图,图片保存在当前路径为"save.png": #include <gtk/gtk.h> #include <cairo.h> /******************************************************** 功能:指定窗口区域截图,需要包含头文件cairo.h 参数: area: 需要截图的窗口指针 x, y, w, h: 截图的范围 path_name: 保存图片的路径名字,如 "./image/test.

QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)

QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg(this); dlg.exec(); 如果不加this,则会在任务管理器里面产生一个新的EXE. 3.如果对话框的标题是自定义,不想使用系统的标题,这时候需要在代码中加入: setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint ); setAttr

Windows 7个性化配置,关闭Win7动画效果,设置窗口背景为“ 豆绿色”

减少眼睛疲劳配色(豆绿色): RGB:199, 237, 204,颜色名称:#C7EDCC 1.任务栏设置 2.关闭Win7动画效果 控制面板 -> 轻松访问 -> 优化视频显示 3.去掉窗口阴影 右键单击桌面“计算机” --> “属性” --> “高级系统设置” --> “高级” --> 选择“性能”的“设置” --> 弹出“性能选项”窗口 效果如下图所示: (不勾选 “在窗口下显示阴影”) 4.设置窗口背景为“ 豆绿色” 右键单击“桌面” --> “个性

Win8.1设置窗口背景颜色为护眼色

注册表法 window+R --->输入regedit(点击确定后进入注册表编辑器) 需要修改以下两个地方,重启电脑生效: [HKEY_CURRENT_USER\Control Panel\Colors] "Window"="202 234 206" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\DefaultColors\Standard] "Window&

GTK进阶学习:绘图事件

GTK界面只要有图片的地方,其底层实际上是通过绘图实现的,所以,我们很有必要学习一下绘图,这里我们使用 Cairo 进行相应的绘图操作. Cairo是用于绘制二维矢量图形的跨平台图形库,采用 C 语言实现,又被许多其它计算机语言所绑定.我们可以使用Cairo库在窗口中绘图,也可以用于生成PNG图片.PDF.PostScript.SVG文件.Cairo同时也是自由软件库,自GTK+2.8版本开始,Cairo成为GTK+库的一部分. 绘图实际上也是事件的一种,GTK中,绘图事件也叫曝光事件. 绘图时

GTK进阶学习:定时器

定时器在应用编程里用得很广,我们手机里的闹钟,幻灯片播放图片等应用都用到定时器.定时器,每隔一段时间干一件事(程序里表现为调用一个函数),像闹钟,每隔一天响一次. 定时器的创建: guint g_timeout_add(guint interval, GSourceFunc function, gpointer data); interval:设置的时间间隔,以毫秒为单位( 1000即为1秒 ) function:回调函数的名字 data:给回调函数传的参数 返回值:定时器id号 使用实例: g

GTK进阶学习:属性改变事件

当窗口初始化,被移动或拉伸时,会触发属性改变事件. 属性改变事件产生的信号:configure_event 其回调函数的定义如下: gboolean callback( GtkWidget *widget, GdkEventConfigure *event, gpointer data ) { event:属性事件结构体变量,系统内部的变量,不是用户传参的 event->x,event->y:窗口的起点坐标 event->width,event->height:窗口的大小 } 以下

GTK进阶学习:鼠标事件

鼠标事件,可以理解为操作鼠标的动作.对于窗口而言,用户操作鼠标,窗口检测到鼠标的操作( 产生一个信号 ),然后去做相应处理( 调用其规定的回调函数 ),即可认为是鼠标事件,还是信号与回调函数的知识点. 信号与回调函数的使用请点击此处. 窗口默认不接收鼠标的操作,需要手动添加让其接收. 设置控件捕获(接收)相应的事件: void gtk_widget_add_events( GtkWidget *widget, gint events ); widget:控件 events:事件类型,它是GdkE

设置flex 背景图

Flex4设置Application背景图片 2010-11-26 14:07:58|  分类: Flex|举报|字号 订阅 <?xml version="1.0" encoding="utf-8"?><s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx=&qu