GTK中如何捕捉和屏蔽按键信号(如F10等)
来源:互联网 发布:java web小项目下载 编辑:程序博客网 时间:2024/06/04 18:37
GTK 在事件与信号处理这一块比较复杂,以下是我调查整理的两种处理键盘按键信号的方法。
方法一,这个方法可以让F10信号被屏蔽:
在 gtk 的 .gtkrc 配置文件中加如下代码:
gtk-menu-bar-accel = ""binding "NoKeyboardNavigation" { unbind "<shift>F10"}class "*" binding "NoKeyboardNavigation
注意:这可能只对 F10 有效,将代码中的F10改成其他值,可能不行。
上面这段代码来自于:https://bbs.archlinux.org/viewtopic.php?id=129872
方法二:
在 gtk 中,捕捉键盘按键信号 “key-press-event”,从而屏蔽它,想屏蔽哪那个按键信号,就检查按键信号处理函数是否有该按键信号,若有让回调函数返回 TRUE,其余情况返回FALSE。可以修改如下代码来验证。
代码如下,该程序实现了建立一个gtk窗口,并从键盘捕捉按键信号。
#include <gtk/gtk.h>#include <gdk/gdk.h>#include <glib.h>#include <glib/gprintf.h>#include <stdlib.h>#include <string.h>#include <gdk/gdkkeysyms.h>/*按键信号处理回调函数*/gboolean key_value(GtkWidget *widget, GdkEventKey *event, gpointer data){ GtkWidget *label = (GtkWidget *)data; guint keyvalue = event->keyval; gchar temp[100]; strcpy(temp, "press: "); if(event->state & GDK_CONTROL_MASK) strcat(temp, "CTRL+"); if(event->state & GDK_SHIFT_MASK) strcat(temp, "SHIFT+"); if(event->state & GDK_META_MASK) strcat(temp, "ALT+"); if(event->state & GDK_LOCK_MASK) strcat(temp, "LOCK+"); strcat(temp, gdk_keyval_name(event->keyval)); gtk_label_set_text (GTK_LABEL(label), temp); g_print("%s, ",temp); // 在终端打印键值 g_print("%s value 0x%x/n", gdk_keyval_name(event->keyval), event->keyval); gtk_entry_set_text(GTK_ENTRY(widget), ""); return FALSE;}int main(int argc, char *argv[]){ GtkWidget *window; GtkWidget *hbox; GtkWidget *label; GtkWidget *button; GtkWidget *entry; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL);// gtk_window_set_default_size(GTK_WINDOW(window), 300, 300); hbox = gtk_hbox_new(FALSE, 10); gtk_container_set_border_width(GTK_CONTAINER(hbox), 10); gtk_container_add (GTK_CONTAINER(window), hbox); label = gtk_label_new ("please press any key"); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 10); entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 10); button = gtk_button_new_with_label ("close"); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 10); gtk_widget_show_all(window); g_signal_connect(button, "clicked", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); /*传递“key-press-event”信号*/ g_signal_connect(entry, "key-press-event", G_CALLBACK(key_value), label); gtk_main(); return 0;}
结果如下:
/*点滴积累,我的一小步O(∩_∩)O~*/
0 0
- GTK中如何捕捉和屏蔽按键信号(如F10等)
- Linux中如何屏蔽信号
- js屏蔽(禁止)键盘和鼠标功能键,如屏蔽鼠标右键,F5刷新等
- 如何在Android App中屏蔽(拦截)Home按键及其他按键
- 如何在Android App中屏蔽(拦截)Home按键及其他按键
- 如何在Android App中屏蔽(拦截)Home按键及其他按键
- 阻塞信号和捕捉信号
- 如何实现信号屏蔽
- linux shell脚本和应用程序中如何屏蔽ctrl+c信号
- linux进程如何捕捉信号
- 信号捕捉(三)
- 在PB中如何屏蔽掉ALT+F4按键
- 信号的捕捉和处理
- 【golang】信号捕捉和处理
- 屏蔽ESC和回车按键
- js 屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键等
- 如何屏蔽特殊字符(如: ' )
- 信号屏蔽(pending)
- 剑指off-复制复杂链表
- Fly-By Topology
- ACM_Floyd-Warshall (Floyd) 算法
- keySet 与entrySet 遍历HashMap性能差别
- 光标
- GTK中如何捕捉和屏蔽按键信号(如F10等)
- Sort and Shuffle 排序和打乱
- 可穿戴设备(CC2541)上微信(8)
- hdu 4289 Control (最小割 sap)
- Redis总体介绍
- python进阶四:类的继承
- POJ_1107_WsCipher
- mysql命令大全
- Memcached简单介绍