GTK自定义函数之滑动密码锁(6)-bobo

类似于手机解锁功能一样,可以滑动解锁!!!

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

GTK自定义函数源码下载


/*********************自定义滑动锁***************************************/

#define MOTIONKEY_NUM 9	//锁的个数

//滑动锁抬起时回调函数的的类型
typedef gboolean (*SunGtkMotionLockRelease)(GtkWidget *widget, GdkEventButton *event, gpointer data);

//整个滑动锁的结构体
typedef struct _motion_lock
{
	GtkWidget *event_box;	//滑动事件盒子
	GtkWidget *fixed;		//事件盒子添加固定布局
	GtkWidget *image[MOTIONKEY_NUM];	//图片控件
	gint password[MOTIONKEY_NUM];		//密码记录
	gint pressed[MOTIONKEY_NUM];		//每个图片是否以按下
	gint start_flag;		//第一次按下标志位
	
	gint lock_size;			//整个滑动锁的大小
	gint img_size;			//每张图片大小
	gint space_size;		//图片间的间距
	gchar *press_pic;		//按下照片路径
	gchar *unpress_pic;		//未按下照片路径
}SungtkMotionLock;

//滑动锁抬起时的处理
extern void sungtk_motion_lock_release_deal(SungtkMotionLock *lock);

//设置滑动锁抬起时执行的回调函数, 实际就是事件盒子抬起事件
extern void sungtk_motion_lock_signal_release(SungtkMotionLock *lock, SunGtkMotionLockRelease callback_release);

//获取滑动锁按下的值
extern void sungtk_motion_lock_get_password(SungtkMotionLock *lock, char *pwd, int size);

//滑动锁的创建,需要指定大小,和图片路径名
extern SungtkMotionLock *sungtk_motion_lock_new(gint lock_size, gint img_size, const gchar *press_pic, const gchar *unpress_pic);

//滑动锁资源释放
extern void sungtk_motion_lock_unref(SungtkMotionLock *lock);
/**************************************************************************/


//测试程序

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

#define MOTIONLOCK_SIZE 320			//整个大小
#define MOTIONLOCK_IMG_SIZE 65		//一个按钮的大小
#define MOTIONLOCK_PRESS_PIC "../picture/press.png"	//被按下照片路径
#define MOTIONLOCK_UNPRESS_PIC "../picture/unpress.png"	//未按下的照片路径
#define HAND_PWD "14789"	//密码

static gboolean callback_motionlock_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
	SungtkMotionLock *lock = (SungtkMotionLock *)data;

	char get_pwd[10] = "";
	sungtk_motion_lock_get_password(lock, get_pwd, sizeof(get_pwd));//获取密码
	printf("get_pwd===%s\n", get_pwd);
	
	if(strcmp(get_pwd, HAND_PWD)==0){
		printf("right\n");
	}else{
		printf("Error ! ! !\n");
	}
	
	sungtk_motion_lock_release_deal(lock);//最后必须要调用
	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);

	
	//创建密码滑动锁,需要知道大小和图片路径
	SungtkMotionLock *lock = sungtk_motion_lock_new(MOTIONLOCK_SIZE, MOTIONLOCK_IMG_SIZE, 
		MOTIONLOCK_PRESS_PIC, MOTIONLOCK_UNPRESS_PIC);
	gtk_table_attach_defaults(GTK_TABLE(table), lock->event_box, 0, 5, 0, 5);
		
	//设置在滑动抬起后的回调函数
	sungtk_motion_lock_signal_release(lock, callback_motionlock_release_event);

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




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值