注册按键[i8320]

也是API DOC中有。 下面是简单使用的代码。

更详细的可以看文档或者gtk源代码。gdkkeysyms.h gdkkeysyms.c

 

头文件#include <gdk/gdkkeysyms.h>

#include <gdk/gdkevents.h>
下面是占用按键。这个grab的模式是后来后得,谁最后grab了,就是谁的。就像是入栈出栈一样。谁在栈尾,谁享受按键。
一旦你grab了一个按键 ,那么,这个按键动作就会一直发送到你的程序,直到有新的程序起来了,并grab它,或者你ungrab.   int keyID;

    gdk_key_grab(NULL, GDK_End_k,0,TRUE);// 这三个就是主面板的三个键。

    gdk_key_grab(NULL, GDK_Send,0,TRUE);

    gdk_key_grab(NULL, GDK_Home_k,0,TRUE);

    keyID = gtk_key_snooper_install(key_snoop, window);//函数。
key_snoop响应按键。gint key_snoop(GtkWidget* widget, GdkEventKey* event, gpointer data)

{  

 

//我这里三个键按下去都是将程序窗口隐藏起来。

    if(widget == NULL)

    {

        switch(event->keyval)

        {

            case GDK_End_k:

                k_hide_window(data);

                return TRUE;

            case GDK_Send:

                k_hide_window(data);

                return TRUE;

            case GDK_Home_k:

                k_hide_window(data);

                return TRUE;

            default:

                return FALSE;

        }  

    }

    return FALSE;

}
实现,,,,记得隐藏起来后要把按键注销了。。要不然你程序隐藏起来了按键消息还往你那发。void k_hide_window(gpointer data)

{  

    fprintf(stderr,"=======  main window hide =========\n");

    gtk_window_iconify(GTK_WINDOW(data));//将窗口隐藏起来

    gdk_key_ungrab(NULL, GDK_End_k,0);

    gdk_key_ungrab(NULL, GDK_Send,0);

    gdk_key_ungrab(NULL, GDK_Home_k,0);

}
比如说我是通过订阅了一个消息将窗口激活的。
这个回调函数是这样的,将窗口显示出来之后又要将那些按键重新grab到。gboolean __OnNotifyDeiconify(EvtSysEventSourceId_t source_id, const char* noti_id, const GArray* properties, void* priv_data)

{

    EvtSysEventProperty_t* e;

    e = &g_array_index(properties, EvtSysEventProperty_t, 0);

    if(strcmp(e->value.s, "com.heimutuzhu.heyc.deiconify") == 0)

    {

        fprintf(stderr,"=== com.heimutuzhu.heyc.deiconify received.====\n");

        gtk_window_deiconify(GTK_WINDOW(priv_data));//将窗口重新显示出来。

        gdk_key_grab(NULL, GDK_End_k,0,TRUE);

        gdk_key_grab(NULL, GDK_Send,0,TRUE);//再次grab这些按键

        gdk_key_grab(NULL, GDK_Home_k,0,TRUE);

        fprintf(stderr,"=======  main window show =========\n");

    }

    return TRUE;

}

你可能感兴趣的:(注册)