Desactiver le raccourcis clavier par defaut d'un dialog

Signaler
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013
-
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013
-
Bonjour, j'ai crée un dialog tout bete via un fichier ressource et par defaut window m'attribue le raccourcis clavier espace au tout premier pushbutton du dialog (ce qui me ferme l'application) et je ne peux pas mettre de boutton quitter. Je pourrais intercepter cette commande pour la rendre inoperante mais meme dans le dessin du dialog je me retrouve avec le boutton en question avec un cadre plus important que les autres et qui bouge lors de l'appuis sur espace.
Y a pas un style a rajouter pour eviter cela ?

6 réponses

Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
Bonjour,

Ton bouton est défini comme 'bouton par défaut' dans ta dialogbox donc l'affichage est différent (style DEFPUSHBUTTON)

Comme c'est le premier, il a le focus et quand tu appuies sur espace ce bouton est activé.

Son identifiant doit être IDCANCEL ou IDOK s'il te ferme l'application

Donc :

Enlève le style DEFPUSHBUTTON
Change le Tab Order pour qu'il n'aie pas le focus
Renomme son identifiant en autre chose que IDCANCEL ou IDOK

ed73
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

Ben justement c'est ca le probleme, je te montre le code du fichier rc

IDD_DIALOG2 DIALOGEX 0,0,623,426
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SETFONT | DS_FIXEDSYS | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU
CAPTION "Boulier"
FONT 8,"MS Shell Dlg 2",400,0,1
BEGIN
    PUSHBUTTON      "Quitter",IDC_QUITTER,619,25,82,13
    PUSHBUTTON      "Quitter2",IDC_QUITTER2,519,25,82,13
    CONTROL         "",IDC_STATIC2,WC_STATIC,SS_BLACKFRAME | SS_NOTIFY,191,72,419,337
....
....

Il n y a rien, j'ai deja chnagé les ID, pas de DEFBUTTON, je ne comprend pas
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

En fait mon probleme ce n 'est pas que la barre espace ferme mon programme, c'est que windows associe automatiquement le raccourcis espace a mon premier bouton du dialog quel qu'il soit.
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
Non, Windows n'associe pas le "racourci espace" à un bouton. C'est une histoire de focus. Le premier contrôle d'une dialogbox selon le Tab Order a le focus et si c'est un  bouton, il est sélectionné donc l'appui sur espace l'active.


Arrange-toi pour modifier le Tab Order, ou si ce n'est pas ce que tu souhaites, attribue le focus à un autre contrôle lors de l'initialisation de la dialogbox (OnInitDialog ou WM_INITDIALOG).


 


 
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

En fait tu as raison, l'espace correspond bien au bouton qui a le focus (le dernier qur lequel j'ai appuyé) , il n'y a pas un moyen de desactiver ca ? Car au cours de l'utilisation de l'application une pression sur espace et tout peut arriver (un moyen plus simple que d'intercepter les commandes focus comme via les styles)
Par contre dans le dessin du dalog le premier bouton du dialog a toujours la bordure plus epaisse que les autres.
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

Bon rien a faire, j'ai vu la fonction AttachThreadInput et les hooks mais le truc le plus leger que j'ai pu trouver c'est ca.

        case WM_COMMAND:
        {
            char texte[255];
            //si c'est un boutton on supprime le focus
            GetClassName((HWND)lParam,texte,256);
            if (!lstrcmpi(texte,"Button")) {SetFocus(NULL);}