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

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

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

GTK自定义函数源码下载


  1. /*********************自定义滑动锁***************************************/  
  2.   
  3. #define MOTIONKEY_NUM 9 //锁的个数  
  4.   
  5. //滑动锁抬起时回调函数的的类型  
  6. typedef gboolean (*SunGtkMotionLockRelease)(GtkWidget *widget, GdkEventButton *event, gpointer data);  
  7.   
  8. //整个滑动锁的结构体  
  9. typedef struct _motion_lock  
  10. {  
  11.     GtkWidget *event_box;   //滑动事件盒子  
  12.     GtkWidget *fixed;       //事件盒子添加固定布局  
  13.     GtkWidget *image[MOTIONKEY_NUM];    //图片控件  
  14.     gint password[MOTIONKEY_NUM];       //密码记录  
  15.     gint pressed[MOTIONKEY_NUM];        //每个图片是否以按下  
  16.     gint start_flag;        //第一次按下标志位  
  17.       
  18.     gint lock_size;         //整个滑动锁的大小  
  19.     gint img_size;          //每张图片大小  
  20.     gint space_size;        //图片间的间距  
  21.     gchar *press_pic;       //按下照片路径  
  22.     gchar *unpress_pic;     //未按下照片路径  
  23. }SungtkMotionLock;  
  24.   
  25. //滑动锁抬起时的处理  
  26. extern void sungtk_motion_lock_release_deal(SungtkMotionLock *lock);  
  27.   
  28. //设置滑动锁抬起时执行的回调函数, 实际就是事件盒子抬起事件  
  29. extern void sungtk_motion_lock_signal_release(SungtkMotionLock *lock, SunGtkMotionLockRelease callback_release);  
  30.   
  31. //获取滑动锁按下的值  
  32. extern void sungtk_motion_lock_get_password(SungtkMotionLock *lock, char *pwd, int size);  
  33.   
  34. //滑动锁的创建,需要指定大小,和图片路径名  
  35. extern SungtkMotionLock *sungtk_motion_lock_new(gint lock_size, gint img_size, const gchar *press_pic, const gchar *unpress_pic);  
  36.   
  37. //滑动锁资源释放  
  38. extern void sungtk_motion_lock_unref(SungtkMotionLock *lock);  
  39. /**************************************************************************/  


//测试程序

  1. #include <gtk/gtk.h>  
  2. #include<string.h>  
  3. #include"sungtk_interface.h"  
  4.   
  5. #define MOTIONLOCK_SIZE 320         //整个大小  
  6. #define MOTIONLOCK_IMG_SIZE 65      //一个按钮的大小  
  7. #define MOTIONLOCK_PRESS_PIC "../picture/press.png" //被按下照片路径  
  8. #define MOTIONLOCK_UNPRESS_PIC "../picture/unpress.png" //未按下的照片路径  
  9. #define HAND_PWD "14789"    //密码  
  10.   
  11. static gboolean callback_motionlock_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data)  
  12. {  
  13.     SungtkMotionLock *lock = (SungtkMotionLock *)data;  
  14.   
  15.     char get_pwd[10] = "";  
  16.     sungtk_motion_lock_get_password(lock, get_pwd, sizeof(get_pwd));//获取密码  
  17.     printf("get_pwd===%s\n", get_pwd);  
  18.       
  19.     if(strcmp(get_pwd, HAND_PWD)==0){  
  20.         printf("right\n");  
  21.     }else{  
  22.         printf("Error ! ! !\n");  
  23.     }  
  24.       
  25.     sungtk_motion_lock_release_deal(lock);//最后必须要调用  
  26.     return TRUE;  
  27. }  
  28.   
  29. int main(int argc, char *argv[])  
  30. {  
  31.     gtk_init(&argc, &argv);  
  32.   
  33.     GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);  
  34.     gtk_window_set_title((GtkWindow *)window, "Hello");  
  35.     gtk_widget_set_size_request(window, 400,300);  
  36.       
  37.     GtkWidget *table = gtk_table_new(5, 5, TRUE);  
  38.     gtk_container_add(GTK_CONTAINER(window), table);  
  39.   
  40.       
  41.     //创建密码滑动锁,需要知道大小和图片路径  
  42.     SungtkMotionLock *lock = sungtk_motion_lock_new(MOTIONLOCK_SIZE, MOTIONLOCK_IMG_SIZE,   
  43.         MOTIONLOCK_PRESS_PIC, MOTIONLOCK_UNPRESS_PIC);  
  44.     gtk_table_attach_defaults(GTK_TABLE(table), lock->event_box, 0, 5, 0, 5);  
  45.           
  46.     //设置在滑动抬起后的回调函数  
  47.     sungtk_motion_lock_signal_release(lock, callback_motionlock_release_event);  
  48.   
  49.     gtk_widget_show_all(window);  
  50.     gtk_main();  
  51.     return 0;  
  52. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值