2

wxWidgets で作成したカスタム コントロールにクリック イベント リスナーを追加するにはどうすればよいですか? カスタム コントロールは wxWindow をベースとして使用します。私が見るイベントリストで

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

2 に答える 2

4

通常、「クリック」イベントはありません ( wxWidgetsの場合はありません )。クリックのアクションは、Mouse Down と Mouse Up の 2 つの部分に分けられます。通常、「左クリック」イベントと考えられるものは、実際には「左アップ」イベントで処理されます。

やってみて:

  • ボタン (このページの [コメントを追加] ボタンなど) にカーソルを合わせます。
  • マウスの左ボタンを押したままにします
  • ボタンを押したままマウスを離す
  • マウスの左ボタンを放します
  • 何も起こりません!

今回:

  • 同じボタンにカーソルを合わせる
  • マウスの左ボタンを押したままにします
  • マウスの左ボタンを放します
  • あなたが期待する「クリック」アクションは、up イベントによってトリガーされます!
于 2008-09-19T04:34:18.247 に答える
2

最初のインスタンスでは、wxWindow ではなく wxControl から継承することをお勧めします。wxControl はまさにその目的のために設計されており、システムと格闘する可能性は低くなります。自分の wxWidgets アプリで作成しているコントロールを見ると、クリック ハンドラーが wxEVT_LEFT_DOWN にアタッチされていることがわかります。wxWidgets を使用した Cross Platform GUI Programming のコピーを見ると、すべての wxMouseEvents のリストが表示されますが、wxEVT_LEFT_CLICK はありません。wxEVT_LEFT_DOWN が使用するイベントであることをお勧めします。

投稿後、Burly の回答を読み、彼に同意します。wxWidgets は最低レベルのイベントを提供し、ユーザーのために構築するユーザー インターフェイスを最大限に制御できます。

于 2008-09-19T04:44:57.020 に答える