Desactiver le raccourcis clavier par defaut d'un dialog

SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013 - 20 févr. 2009 à 09:43
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013 - 24 févr. 2009 à 12:23
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

ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
20 févr. 2009 à 12:31
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
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
20 févr. 2009 à 17:14
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
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
20 févr. 2009 à 17:26
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.
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
20 févr. 2009 à 19:57
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).


 


 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
21 févr. 2009 à 13:58
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.
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
24 févr. 2009 à 12:23
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);}
0
Rejoignez-nous