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

当窗口初始化,被移动或拉伸时,会触发属性改变事件。

属性改变事件产生的信号:configure_event

其回调函数的定义如下:

gboolean callback( GtkWidget *widget,

GdkEventConfigure *event,

gpointer data )

{

event:属性事件结构体变量,系统内部的变量,不是用户传参的

event->x,event->y:窗口的起点坐标

event->width,event->height:窗口的大小

}

以下例子为拉伸或移动窗口,能获取窗口的起点坐标以及大小:

#include <gtk/gtk.h>	// 头文件

// 回调函数
gboolean on_configure_event(GtkWidget * widget,
							GdkEventConfigure * event,
							gpointer data)
{
	// 窗口的起点坐标
	gint x = event->x;
	gint y = event->y;
	printf("x = %d, y = %d\n", x, y);

	// 窗口的宽度和高度
	gint w = event->width;
	gint h = event->height;
	printf("w = %d, h = %d\n", w, h);

	return TRUE;

}

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), "mouse_event");
	// 设置窗口在显示器中的位置为居中
	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
	// 设置窗口的最小大小
	gtk_widget_set_size_request(window, 400, 300);
	// "destroy" 和 gtk_main_quit 连接
	g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

	// "configure_event" 与 on_configure_event 连接
	g_signal_connect(window, "configure_event", G_CALLBACK(on_configure_event), NULL);

	gtk_widget_show_all(window);	// 显示窗口全部控件

	gtk_main();		// 主事件循环

	return 0;
}

源代码下载请点此处。

时间: 2024-10-13 16:20:47

GTK进阶学习:属性改变事件的相关文章

GTK进阶学习:绘图事件

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

GTK进阶学习:鼠标事件

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

Java重要技术(15)内省之属性改变事件和投票否决事件

1.1. 属性改变事件和投票否决事件 PropertyChangeSupport类为Java Bean支持属性改变事件提供了方便. /** * @Title: EventBean.java * @Package com.test.javatechnology.introspection * @Description: * @author http://www.cnblogs.com/coe2coe/ * @date 2017年3月25日 下午6:02:36 * @version V1.0 */

silverlight属性改变事件通知

工作中遇到silverlight本身没有提供的某些属性改变事件,但又需要在属性改变时得到通知,Google搬运stack overflow,原地址 /// Listen for change of the dependency property public void RegisterForNotification(string propertyName, FrameworkElement element, PropertyChangedCallback callback) { //Bind t

监听元素属性改变事件的方法

一.onchange事件只在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效.(就是说你在输入框中输入完内容,输入完了,然后鼠标点别的地方触发该事件)二.oninput事件oninput 事件在用户输入时触发.不支持JS等赋值改变的元素属性.该事件在 <input> 或 <textarea> 元素的值发生改变时触发.(也就是说,不用输入完,边输入边触发该事件)①但是,这个方法是HTML5中的标准事件,IE9以下的浏览器是不支持oninput事件的.②使用时,还需要oni

WPF——数据绑定及属性改变事件

一.首先需要封装一下文本框的属性,并且在实体类中添加一个实体类的属性改变函数 public class User : INotifyPropertyChanged //INotifyPropertyChanged接口是 WPF/Silverlight 开发中非常重要的接口, 它构成了 ViewModel 的基础, 数据绑定基本上都需要这个接口. { private string _Wenben; public string Wenben { get { return _Wenben; } set

GTK进阶学习:事件盒子

有些控件( 如:标签GtkLabel,图片控件GtkImage 等),不响应GDK事件,相当于鼠标在其上面点击,它是捕获不到的.用户通过事件盒子可以解决这个问题. 事件盒子给控件提供一个GDK窗口来捕获事件.我们把控件放在事件盒子里,当我们用鼠标点击这个控件时,这个事件盒子就能捕获到点击的状态. 事件盒子的创建: GtkWidget *gtk_event_box_new(void); 返回值:事件盒子指针 把控件添加到事件盒子里: void gtk_container_add(GtkContai

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(widg

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

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