2011-10-08 132 views
2

我想在GTK +中接收鍵盤和鼠標輸入。對於鍵盤輸入,我嘗試使用加速組,但它不像SDL或SFML那樣流暢。當我按下一個鍵。它響應,暫停了一段時間,再次作出反應,停頓了一段時間,等等。通過鼠標輸入我的意思是在給定的時間獲取鼠標的位置以及是否單擊鼠標按鈕。通過鍵盤輸入,我想跟蹤按鍵和釋放。我正在使用GTK +和開羅進行教育圖形計劃。有點像海龜圖形。任何幫助?或任何與GTK +一起使用並跟蹤鍵盤和鼠標輸入的第三方庫(C或C++)?如何在GTK中獲得鍵盤和鼠標輸入?

+0

我認爲GTK可能是這個職位的錯誤的工具......聽起來像你應該尋找遊戲編程庫。 – ptomato

+0

@DeMix對不起,對標籤。自從我提到第三方_C_或_C++ _庫以來,我認爲應該包含C++和C標記。 – ApprenticeHacker

+0

如果你不太深入這個項目,你可以看看Qt。它沒有任何問題(不是我所知道的)將它用作遊戲引擎。 – RushPL

回答

2

你想要做的是比較複雜的。看看

http://developer.gnome.org/gtk-tutorial/2.90/

和特別是在

http://developer.gnome.org/gtk-tutorial/2.90/x344.html

http://developer.gnome.org/gtk-tutorial/2.90/c2422.html

第二個環節有一個鍵盤迴調,似乎做你想做的源代碼。第三個鏈接是使用鼠標的簡單繪圖程序教程的開始。

編輯:爲了完整起見,我會提到gtkglext庫支持在GTK +中使用OpenGL。見

http://projects.gnome.org/gtkglext/

+0

呃,你可能想提一下,gtkglext只是Gtk2。 Gtk2不再維護,和/或ApprenticeHacker可能會使用Gtk3。 [GtkGLArea](https://developer.gnome.org/gtk3/stable/GtkGLArea.html)是當前使用GL與Gtk一起使用的方式。 – theGtknerd

0

根據文檔] 1你可以得到鼠標移動事件,設置它們的掩碼爲GDK_POINTER_MOTION_MASK - 這意味着即使沒有按鈕被按下,你也會得到運動事件。另外,Gtk+ tutorials顯示了利用鼠標移動事件的一些概念。

當我按下一個鍵。它響應,暫停了一段時間,再次作出反應,停頓了一段時間,等等。

這是什麼意思?我想,你所描述的鍵重複的行爲(與在文本編輯器,當你按下「a」和持有它,你就會得到「aaaaaaaaaaaaa」 To disable it in your app

XKeyboardControl control; 
control.auto_repeat_mode = 0; 

gdk_error_trap_push(); 
XChangeKeyboardControl (GDK_DISPLAY(), KBAutoRepeatMode, &control); 
gdk_error_trap_pop(); 
+0

由此我的意思是關鍵重複是不一致的,就像在SFML和SDL中一樣。如果您在SDL中移動精靈,它會一致移動,因爲isKeyPressed()總是計算爲true,直到您釋放該鍵爲止。但是在GTK +中,如果你持有一個鍵,它會移動,然後停止,然後再次移動,然後停止,然後移動......即isKeyPressed()的結果爲真,然後是假,然後是真。然後假一秒,然後再次爲真。我知道,很難解釋對不起。 – ApprenticeHacker