wxWidgets: clique evento Detecção em controles personalizados
Pergunta
Como adicionar um evento ouvinte clique para meu controle personalizado feito com wxWidgets? Os usos de controle personalizados wxWindow como base. Na lista de eventos que vejo
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
Mas não há wxEVT_LEFT_CLICK
ou similar.
Solução
Normalmente, não existe um "clique" evento (e no caso de wxWidgets - não há ). A ação de clicar é quebrado em suas duas partes: do mouse pressionado e mouse para cima. Normalmente o que você pensa de como um evento de "clique esquerdo" é realmente tratado em um "deixada" do evento.
Experimente:
- Passe o mouse sobre um botão (como o botão "Adicionar comentário" desta página)
- Clique no botão esquerdo do mouse para baixo e segure
- Mova o mouse para fora do botão enquanto pressiona
- Solte o botão esquerdo do mouse
- Não acontece nada!
Este tempo:
- Passe o mouse sobre o mesmo botão
- Clique no botão esquerdo do mouse para baixo e segure
- Solte o botão esquerdo do mouse
- O "clique" ação que você espera é acionado pelo evento up!
Outras dicas
Em primeiro lugar eu recomendo herdando de wxControl não wxWindow, wxControl é projetado para essa finalidade exata e você são menos propensos a encontrar-se lutando contra o sistema. Quando eu olho para um controle que estou construindo em minha própria wxWidgets aplicativo, vejo que meu manipulador de clique é ligado a wxEVT_LEFT_DOWN. Olhando em minha cópia da Programação Cruz Platform GUI com wxWidgets Eu posso ver uma lista de todos wxMouseEvents, e não há wxEVT_LEFT_CLICK. Eu sugeriria wxEVT_LEFT_DOWN é o evento para uso.
Agora, depois de postar Eu li a resposta de Burly e eu concordo com ele, wxWidgets ofertas os eventos de nível mais baixos e que lhe dá o máximo de controle da interface do usuário que você construir para seus usuários.