类似于手机解锁功能一样,可以滑动解锁!!!
接口函数源代码,请查看《GTK自定义函数(1)》,具体介绍和相关demo请看以下内容:
/*********************自定义滑动锁***************************************/
#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;
}