Gtk按键修改器

Gtk按键修改器,gtk,Gtk,我试着检查控制键是否被按下,但我不能。 根据文档,我尝试以下方法: G_MODULE_EXPORT gboolean KEYPRESS_window1(GtkWidget *window1, GdkEventKey* pKey, gpointer user_data) { guint modifiers; modifiers = gtk_accelerator_get_default_mod_mask(); g_print("modifiers %d\n", mod

我试着检查控制键是否被按下,但我不能。 根据文档,我尝试以下方法:

G_MODULE_EXPORT gboolean
KEYPRESS_window1(GtkWidget *window1, GdkEventKey* pKey, gpointer user_data)
{
    guint modifiers;
    modifiers = gtk_accelerator_get_default_mod_mask();

    g_print("modifiers   %d\n", modifiers);
    g_print("pKey->state %d\n", pKey->state);

    if ((pKey->state & modifiers) == GDK_CONTROL_MASK)
    {
        ctrlpressed = 1;
        return TRUE;
    }
return FALSE;
}
信号被触发并正确通过,但逻辑不通过“如果”条件。
我想知道原因,所以请帮助。

要检查Ctrl是否只是自己按下的,您需要检查按下的键的键代码。您应该能够检查事件的
keyval
字段,并检查
GDK\u KEY\u Control\L
GDK\u KEY\u Control\R
。你也可以检查
hardware\u keycode
字段,但我不知道它是否可移植。

g_print()语句打印什么?修饰符469762061 pKey->state 16 pKey->state根据capslock和numlock的不同而变化,因此修饰符似乎根本没有变化。
修饰符
不应该变化,除非您自己更改默认的mod掩码。此代码对我有效-如果我将
ctrlpressed=1
行替换为
g\u print(“Ctrl-pressed\n”)
,我每次按Ctrl+g这样的组合键时都会看到
Ctrl-pressed
。是的,就是这样!当我按下ctrl+G键时,它也可以工作!但我需要检查并设置“ctrlpressed”,只需按下控制键,而无需其他键。哦。。。我想我现在可以给你一个有用的答案;-)是的,使用“if(pKey->keyval==GDK_KEY_Control_L)”我的GUI可以按预期工作。为什么我以前看不到如此简单和合理的解决方案?:)非常感谢你。