2011-10-10 90 views
0

我試着檢查控制鍵是否被按下,但我不能。 根據文檔我試試這個: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", modifiers); 
    g_print("pKey->state %d\n", pKey->state); 

    if ((pKey->state & modifiers) == GDK_CONTROL_MASK) 
    { 
     ctrlpressed = 1; 
     return TRUE; 
    } 
return FALSE; 
} 

信號被提出,並通過正確的邏輯,但不要通過「if」條件。 我想知道爲什麼,所以請幫助。

+0

'g_print()'語句打印什麼? – ptomato

+0

修飾符469762061 pKey-> state 16 pKey-> state取決於capslock,numlock等,修飾符看起來根本沒有改變。 –

+1

'modifiers'不應該改變,除非你自己改變默認的mod掩碼。這段代碼適用於我 - 如果我用'g_print(「Ctrl按下\ n」)替換'ctrlpressed = 1'行,每次按Ctrl + G組合鍵時都會看到'Ctrl'按鈕。 – ptomato

回答

0

若要檢查是否僅按Ctrl,您需要檢查按下的按鍵的按鍵代碼。您應該能夠檢查事件的keyval字段並檢查GDK_KEY_Control_LGDK_KEY_Control_R。您也可以檢查hardware_keycode字段,但我不知道這是否便攜。

+0

是的,用「if(pKey-> keyval == GDK_KEY_Control_L)」我的GUI按預期工作。爲什麼我沒有看到如此簡單和合乎邏輯的解決方案? :) 非常感謝你。 –