2010-01-27 8 views
0

Comment empêcher le petit carré en pointillés qui apparaît sur un bouton lorsqu'il a le focus sur le clavier dans une boîte de dialogue. (w/excuses pour le jargon technique). À un moment donné, j'ai piraté une solution en sous-classant un bouton WindowProc et en subvertissant certains messages Windows, mais je voulais savoir la bonne façon.Problèmes de mise au point sur le clavier

Il y a effectivement un problème avec un autre contrôle dans la boîte de dialogue impliquant également le clavier. Cet autre contrôle est en fait aussi un bouton, mais étant utilisé comme une boîte de groupe ou un panneau, pas comme un bouton de fonctionnement. Mais quand j'appuie sur la touche de tabulation dans la boîte de dialogue, ce "bouton" de la boîte de groupe vient au premier plan obscurcissant les contrôles statiques par-dessus, donc je voulais éviter cela.

Pour les deux de ce qui précède, j'ai essayé d'éteindre WS_TABSTOP - n'a pas aidé)

+0

Vous pouvez essayer de régler la se concentrer sur autre chose lors de la réception du message WM_SETFOCUS. –

+0

Vous savez que je crois que cela fonctionnera réellement pour le bouton de boîte de groupe. Cependant, cela n'a pas fonctionné pour le bouton normal - il a empêché le carré en pointillé, mais a causé d'autres problèmes (le bouton en question est en fait une case à cocher pushlike avec l'apparence d'un bouton normal, mais reste enfoncé tapez BS_ICON, et je dessine une icône différente en fonction de l'état, ce qui ne fonctionne pas correctement lors de la désactivation de WM_SETFOCUS – Mark

Répondre

0

La bonne façon est d'écrire votre propre bouton de commande au lieu d'utiliser la valeur par défaut de Windows un..

Vous pouvez également empêcher la mise au point du clavier.

+0

Comment puis-je les empêcher d'obtenir le focus clavier? WS_TABSTOP – Mark

+0

Le moyen le plus fiable est d'écouter la notification BN_SETFOCUS à partir du bouton, puis de mettre le focus à un autre endroit –

+0

THanks - Je vais rapporter un peu si je reçois ce travail – Mark

1

Les deux de mes problèmes mentionnés ci-dessus ont été résolus en sous-classant les WndProcs et renvoyant 0 en réponse au message 0x128 et en les supprimant. Même Spy ++ n'a pas pu identifier ce message 0x128, et je ne l'ai dans aucun en-tête. Mais il est envoyé à chaque contrôle dans la boîte de dialogue l'onglet première fois est frappé dans la boîte de dialogue.

(j'ai essayé BN_SETFOCUS comme décrit ci-dessus et aussi WM_SETFOCUS mais il n'a pas aidé.)

Donc, si quelqu'un sait où trouver ce message Windows 0x128 est ...

+0

WM_UPDATEUISTATE est le message: "Quand une fenêtre qui tire des indices de clavier reçoit un W Message M_UPDATEUISTATE, il s'annule généralement de sorte que les indices peuvent être redessinés/effacés, selon le nouvel état. " -http: //blogs.msdn.com/oldnewthing/archive/2005/05/03/414317.aspx – Mark

Questions connexes