Pergunta

Meu aplicativo é executado como um plug -in dentro de outro aplicativo com janela. Assim, minha janela geralmente não tem foco. Agora, se alguém mover o mouse sobre um botão/menu e clicar uma vez, tudo o que faz é definir o foco na minha janela. Então (s) ele precisa clicar novamente para obter a funcionalidade real do botão.

Isso é um pequeno aborrecimento, mas eu gostaria de me livrar dele. Primeiro, tentei reivindicar o foco sempre que o mouse entra no meu espaço de diálogo, mas isso provou ser ainda mais irritante. Então, o que eu gostaria de fazer é repetir o clique do mouse, por isso parece que um único clique mudou o foco e pressionado o botão.

Obviamente, eu só deveria fazer isso quando o clique resultou em um setFocus, caso contrário, ele executará a função de botão duas vezes.

Alguma sugestão?

Profundamente e eternamente endividado, David

Foi útil?

Solução

A simulação de cliques do mouse parece um pouco bagunçada aqui, mas você sempre pode simular qualquer clique do mouse em qualquer (x, y) através do API de sendInput Através de P/Invoke:

[DllImport("user32.dll", SetLastError=true)]
static extern uint SendInput(uint nInputs, INPUT [] pInputs, int cbSize);

Você também pode mexer com a propagação/geração de mensagens WM_MOUSEXXXXX diretamente, mas eu brinquei muito com isso e acredite em mim quando digo que é um Kludge total.

Outras dicas

Eu sugeriria que você mantenha o comportamento como está; Esse é um comportamento padrão para o sistema operacional e a alteração pode quebrar as diretrizes de usabilidade padrão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top