문제

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위젯 - 거기에는 없다).클릭 동작은 두 부분으로 나뉩니다.마우스 다운 및 마우스 업.일반적으로 "왼쪽 클릭" 이벤트로 생각되는 이벤트는 실제로 "왼쪽 위로" 이벤트에서 처리됩니다.

사용해 보세요:

  • 버튼 위로 마우스를 가져갑니다(예: 이 페이지의 "댓글 추가" 버튼).
  • 마우스 왼쪽 버튼을 누른 채로 유지하세요.
  • 누른 상태에서 마우스를 버튼 밖으로 이동합니다.
  • 마우스 왼쪽 버튼을 놓습니다.
  • 아무 반응이 없습니다!

이 시간:

  • 같은 버튼 위로 마우스를 가져가세요.
  • 왼쪽 마우스 버튼을 클릭하고 누릅니다
  • 마우스 왼쪽 버튼을 놓습니다.
  • 예상한 "클릭" 동작은 up 이벤트에 의해 트리거됩니다!

다른 팁

우선 wxWindow가 아닌 ​​wxControl에서 상속받는 것을 권장합니다. wxControl은 정확한 목적을 위해 설계되었으며 시스템과 싸울 가능성이 적습니다.내 wxWidgets 앱에서 작성 중인 컨트롤을 보면 내 클릭 핸들러가 wxEVT_LEFT_DOWN에 연결되어 있는 것을 볼 수 있습니다.wxWidgets를 사용한 Cross Platform GUI 프로그래밍 사본을 보면 모든 wxMouseEvents 목록을 볼 수 있으며 wxEVT_LEFT_CLICK은 없습니다.wxEVT_LEFT_DOWN을 사용할 이벤트를 제안합니다.

이제 게시한 후 Burly의 답변을 읽었으며 그의 의견에 동의합니다. wxWidgets는 가장 낮은 수준의 이벤트를 제공하며 이는 사용자를 위해 구성하는 사용자 인터페이스에 대한 최대 제어 권한을 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top