wxウィジェット:カスタム コントロールのクリック イベントの検出
質問
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 は最低レベルのイベントを提供し、ユーザー向けに構築するユーザー インターフェイスを最大限に制御できるようになります。
所属していません StackOverflow