2008-09-19 45 views
2

如何將點擊事件監聽器添加到使用wxWidgets製作的自定義控件中?自定義控件使用wxWindow作爲基礎。在事件列表我看到wxWidgets:檢測自定義控件上的單擊事件

wxEVT_LEFT_DOWN 
wxEVT_LEFT_UP 
wxEVT_LEFT_DCLICK 
wxEVT_MIDDLE_DOWN 
wxEVT_MIDDLE_UP 
wxEVT_MIDDLE_DCLICK 
wxEVT_RIGHT_DOWN 
wxEVT_RIGHT_UP 
wxEVT_RIGHT_DCLICK 
wxEVT_MOTION 
wxEVT_ENTER_WINDOW 
wxEVT_LEAVE_WINDOW 
wxEVT_MOUSEWHEEL 

但沒有wxEVT_LEFT_CLICK或相似。

回答

4

通常,沒有「點擊」事件(並且在wxWidgets-there isn't 的情況下)。點擊的操作分爲兩部分:鼠標向下和鼠標向上。通常,您認爲的「左鍵單擊」事件實際上是在「左上」事件中處理的。

試試看:

  • 將鼠標懸停在一個按鈕(如「添加評論」按鈕此頁)
  • 單擊鼠標左鍵,並按住
  • 將鼠標移開的同時按下按鈕
  • 釋放鼠標左鍵
  • 什麼也沒有發生!

這一次:

  • 將鼠標懸停在同一個按鈕
  • 點擊 鼠標左鍵,並按住
  • 鬆開鼠標左鍵
  • 「點擊」行動你期望是由up事件引發的!
+0

是的,這是使用左下而不是點擊的問題。通常,用戶可以通過將指針移動到對象外面來按住鼠標按鈕來取消點擊。在這裏,我需要通過檢測左下和左上來準確檢測點擊?真是太麻煩了:( – yuku 2008-09-19 06:13:50

+1

我想如果你要編寫一個控件,你需要準備好管理用戶鼠標交互的所有細節,從這個角度來看,wxWidget系列的鼠標事件是有意義的 – 2008-09-19 23:46:52

2

在第一個實例中,我建議從wxControl繼承而不是wxWindow,wxControl是爲了確切目的而設計的,並且您不太可能發現自己正在與系統進行對抗。當我看着我在自己的wxWidgets應用程序中構建的控件時,發現我的點擊處理程序已連接到wxEVT_LEFT_DOWN。用wxWidgets查看我的跨平臺GUI編程副本,我可以看到所有wxMouseEvents的列表,並且沒有wxEVT_LEFT_CLICK。我建議wxEVT_LEFT_DOWN是要使用的事件。

現在發佈之後,我已經閱讀了Burly的回答,並且我同意他的觀點,wxWidgets提供了最低級別的事件,並且可以爲您的用戶構建用戶界面的最大控制量。