Mark..
8
您的原始语法是正确的.
g_signal_connect(window, "key-release-event", G_CALLBACK(key_event), NULL);
key_event函数看起来像(注意我使用gdk_keyval_name将keyval int值转换为字符串进行打印):
static gboolean
key_event(GtkWidget *widget,
GdkEventKey *event)
{
g_printerr("%s\n",
gdk_keyval_name (event->keyval));
return FALSE;
}
这是一个完整的示例程序:
#include
static gboolean
key_event(GtkWidget *widget,
GdkEventKey *event)
{
g_printerr("%s\n",
gdk_keyval_name (event->keyval));
return FALSE;
}
int main( int argc,
char *argv[] )
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "key-release-event", G_CALLBACK(key_event), NULL);
gtk_widget_show (window);
gtk_main ();
return 0;
}
@Sinthet,事件变量是指向GdkEventKey(http://developer.gnome.org/gdk/stable/gdk-Event-Structures.html#GdkEventKey)结构的指针.它有一个成员keyval:一个unsigned int,对应于被按下的键.此映射在gdkkeysyms.h中定义(http://git.gnome.org/browse/gtk+/plain/gdk/gdkkeysyms.h) (2认同)