gpt4 book ai didi

c - 在简单的 gtk 按键事件示例中,GDK_SHIFT_MASK 似乎被忽略了

转载 作者:太空狗 更新时间:2023-10-29 16:40:16 27 4
gpt4 key购买 nike

有人可以编译并执行我在下面提供的小示例代码吗?请让我知道 shift 键修饰符是否适合您。此示例旨在演示 gtk 中的按键功能。它适用于简单的按键操作,甚至适用于控制键修饰符,但不适用于 shift 键修饰符。

/*
*
* compile command:
*
* gcc keypress3.c -o keypress3 `pkg-config --libs --cflags gtk+-2.0`
*
*/

#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>

gboolean
on_key_press (GtkWidget *widget, GdkEventKey *event, gpointer user_data);

int main (int argc, char *argv[])
{
GtkWidget *window;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
g_signal_connect (G_OBJECT (window), "key_press_event", G_CALLBACK (on_key_press), NULL);

gtk_widget_show_all (window);

gtk_main ();

return 0;
}

gboolean
on_key_press (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
switch (event->keyval)
{
case GDK_p:
printf("key pressed: %s\n", "p");
break;
case GDK_s:
if (event->state & GDK_SHIFT_MASK)
{
printf("key pressed: %s\n", "shift + s");
}
else if (event->state & GDK_CONTROL_MASK)
{
printf("key pressed: %s\n", "ctrl + s");
}
else
{
printf("key pressed: %s\n", "s");
}
break;
case GDK_m:
if (event->state & GDK_SHIFT_MASK)
{
printf("key pressed: %s\n", "shift + m");
}
else if (event->state & GDK_CONTROL_MASK)
{
printf("key pressed: %s\n", "ctrl + m");
}
else
{
printf("key pressed: %s\n", "m");
}
break;

default:
return FALSE;
}

return FALSE;
}

我得到的输出:

key pressed: m
key pressed: ctrl + m
key pressed: p
key pressed: ctrl + s
key pressed: s

当我按下 shift + s 或 shift + m 时我什么也没得到,所以我似乎不太了解应该如何使用 GDK_SHIFT_MASK 即使我已经阅读了文档并且我已经看到了很多其他出现它的例子以完全相同的方式使用。

最佳答案

按下shift+s时event->keyval的值是GDK_S,不是GDK_s。换句话说,GDK 已经为您解释了键盘,给您的是符号“S”,而不是“s”。不过,移位掩码仍处于设置状态。您可以通过为 GDK_S 添加一个案例来看到这一点:

...
case GDK_S: // add this line
case GDK_s:
if (event->state & GDK_SHIFT_MASK)
{
printf("key pressed: %s\n", "shift + s");
}
else if (event->state & GDK_CONTROL_MASK)
{
....

关于c - 在简单的 gtk 按键事件示例中,GDK_SHIFT_MASK 似乎被忽略了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10134956/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com