wxウィジェット:カスタム コントロールのクリック イベントの検出

StackOverflow https://stackoverflow.com/questions/98941

  •  01-07-2019
  •  | 
  •  

質問

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 または類似。

役に立ちましたか?

解決

通常、「クリック」イベントはありません(そして、 wxウィジェット - ありません)。クリックというアクションは 2 つの部分に分かれています。マウスダウンとマウスアップ。通常、「左クリック」イベントとして考えられているものは、実際には「左上」イベントで処理されます。

やってみて:

  • ボタン(このページの「コメントを追加」ボタンなど)の上にマウスを置きます。
  • マウスの左ボタンをクリックしたままにします
  • ボタンを押したままマウスをボタンから離します
  • マウスの左ボタンを放します
  • 何も起こりません!

この時:

  • 同じボタンの上にマウスを移動します
  • 左マウスボタンをクリックして保持します
  • マウスの左ボタンを放します
  • あなたが期待する「クリック」アクションは、up イベントによってトリガーされます。

他のヒント

まず最初に、wxWindow ではなく wxControl から継承することをお勧めします。wxControl はまさにその目的のために設計されており、システムと戦う可能性は低くなります。独自の wxWidgets アプリで構築しているコントロールを見ると、クリック ハンドラーが wxEVT_LEFT_DOWN にアタッチされていることがわかります。私のコピー『wxWidgets によるクロスプラットフォーム GUI プログラミング』を見ると、すべての wxMouseEvent のリストが表示されますが、wxEVT_LEFT_CLICK はありません。wxEVT_LEFT_DOWN を使用するイベントをお勧めします。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top