GTK自定义函数之滚动窗口(4)-bobo

利用滚动窗口,设置滑动。

接口函数源代码,请查看《GTK自定义函数(1)》,具体介绍和相关demo请看以下内容:

 GTK自定义函数源码下载

 

/***********************************************
* 函数功能:创建一个滚动窗口
* 参数类型:
* 返回类型:成功返回0,失败返回-1
* 维护记录:2013-12-18 by lihuibo
***********************************************/
extern GtkWidget *sungtk_scrolled_window_new(void);
/***********************************************
* 函数功能:设置滚动窗口的水平值
* 参数类型:widget:滚动窗口地址
    add_val:原基础之上进行相加,正负值滚动相反方向
* 返回类型:成功返回0,失败返回-1
* 维护记录:2013-12-18 by lihuibo
***********************************************/
extern int sungtk_scrolled_window_set_hadjustment_value(GtkWidget *s_window, const gdouble add_val);
/***********************************************
* 函数功能:设置滚动窗口的垂直方向值
* 参数类型:widget:滚动窗口地址
    add_val:原基础之上进行相加,正负值滚动相反方向
* 返回类型:成功返回0,失败返回-1
* 维护记录:2013-12-18 by lihuibo
***********************************************/
extern int sungtk_scrolled_window_set_vadjustment_value(GtkWidget *s_window, const gdouble add_val);
 


 

 

#include <gtk/gtk.h>
#include"sungtk_interface.h"


gboolean callback_press( GtkWidget *widget,GdkEventButton *event,gpointer data )
{
	printf("abcdef\n");
	return TRUE;
}

gboolean callback_motion( GtkWidget *widget,GdkEventMotion *event,gpointer data )
{
	printf("11111111111\n");
	static double old_y = 0;
	double new_y = event->y;
	if(new_y - old_y > 5){
		old_y = new_y;
		sungtk_scrolled_window_set_vadjustment_value(GTK_WIDGET(data),5);
	}else if(old_y - new_y > 5){
		old_y = new_y;
		sungtk_scrolled_window_set_vadjustment_value(GTK_WIDGET(data),-5);
	}
	return TRUE;
}
int main(int argc, char *argv[])
{
	gtk_init(&argc, &argv);

	GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title((GtkWindow *)window, "Hello");
	gtk_widget_set_size_request(window, 400,300);
	

	GtkWidget *table = gtk_table_new(5, 5, TRUE);
	gtk_container_add(GTK_CONTAINER(window), table);
	//滚动窗口
	GtkWidget *s_window = sungtk_scrolled_window_new();
	gtk_table_attach_defaults(GTK_TABLE(table), s_window, 2, 5, 0, 5);
	GtkWidget *label = gtk_label_new("ssssssssss\nasdfas\ndfjka\nsjd\nlkh\nnkas\ndnfk\nsahdfk\nasdfkash\ndkfh\nksdhfe\nwiflkd\nsdf\nafa;skfa\nksfas\n54f\n6a4s\nfas\nodj\nfa\ns\nkje9\nrajskfdj\nsf.zms\ndifue\nfzkdi\nfp;awm\nfsl\nd\njfaiejf\nalsjdei'\nakfa\nsuo\ngn\nad\nfwi\noljf\nlaj\nf9ow");
	GtkWidget *event = gtk_event_box_new();//事件盒子
	gtk_container_add(GTK_CONTAINER(event), label);
	gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(s_window), event);
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(s_window), GTK_POLICY_NEVER, GTK_POLICY_NEVER);//设置滚动条不出现
	//滚动窗口移动事件无效,点击事件有效,所以添加了事件盒子
	//类似的clist支持移动事件,所以也可以设置clist的移动事件
	gtk_widget_add_events(s_window, GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_BUTTON_MOTION_MASK);
	g_signal_connect(s_window, "button-press-event", G_CALLBACK(callback_press), NULL);
	g_signal_connect(event, "motion-notify-event", G_CALLBACK(callback_motion), s_window);


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



 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值