类似于手机解锁功能一样,可以滑动解锁!!!
接口函数源代码,请查看《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;
- }