IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC] raccourcis clavier et dialog


Sujet :

MFC

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Points : 50
    Points
    50
    Par défaut [MFC] raccourcis clavier et dialog
    j'ai lu quelque part qu'il n'était pas possible d'utiliser les Accelerators pour créer des raccourcis claviers dans une appli de type dialog. Existe-t-il un moyen de contourner ce problème??

    Merci d'avance.

  2. #2
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Qui va piano va sano...

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Points : 50
    Points
    50
    Par défaut
    Ok merci matazz, c'est exactement ce que je veux... Cependant, j'ai un petit problème dans la mise en place:

    After creating the accelerator table, use ClassWizard to add a handler for the id(s) you provided in the accelerator table. Then, you can do most anything in the handler that you need to do when the key is typed. If you do nothing in the handler, nothing happens when that key (combination) is typed.
    En fait j'ai mis les mêmes ids dans l'accelerator table que sur mes menus et mes fonctions étaient donc déjà créées.

    j'ai donc la ligne suivante (par exemple) dans les messages maps
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	ON_COMMAND(ID_WINDOWS_HIDE_HEADER, OnWndShowHideHeader)
    avec ID_WINDOWS_HIDE_HEADER qui correspond donc à la fois à la combinaison de touches Ctrl+h (dans l'accelerator table) et a un item du menu. Pourtant ma combinaison de touche ne marche pas...

    Ai je omis quelque chose??

    Merci d'avance

  4. #4
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    Tu as bien surchargé PreTranslateMessage ?
    ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (WM_KEYFIRST <= pMsg->message && pMsg->message
                    <= WM_KEYLAST)
      if (m_hAccel && ::TranslateAccelerator
         (m_hWnd, m_hAccel, pMsg))
        return TRUE;
    Sinon as-tu essayé un accélérateur sans combinaison de touche ?
    Qui va piano va sano...

  5. #5
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Points : 50
    Points
    50
    Par défaut
    J'ai bien surchargé la fonction PreTranslateMesssage, et meme essayé sans combinaison de touche... Ca ne marche pas

    Je me suis fait un exemple simple et j'ai réussi à utiliser les accelerator. Ca doit venir de mon appli (peut etre le tab control qui fait que la fenetre courant e n'est pas celle de l'appli mais la dialog active du tabcontrol??? : : )

    Je continue de chercher.

    Merci en tout cas

  6. #6
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Points : 50
    Points
    50
    Par défaut
    Ca a un lien avec le tab control, c'est a peu pres sur, parce qu'en naviguant dans les onglets et en essayant les raccourcis clavier, ca finit par marcher...

    Comment puis je faire pour que ca marche dès l'ouverture de l'appli sans avoir touché à aucun onglet???

  7. #7
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    Alors essaye te mettre le focus sur ta CDialog...
    Qui va piano va sano...

  8. #8
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Points : 50
    Points
    50
    Par défaut
    Ben oui je veux bien, mais va falloir que je le remette tout le temps, car dès que je toucherai au contenu du tabcontrol la dialog principale perdra le focus???

  9. #9
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    A ce moment la tu as deux solution :

    ->Intercepter la touche Tab et ne rien faire (mais tu perd la fonctionalité)
    ->Sur chaque évenement de tes controles rendre le focus à la fin à ta CDialog.
    Qui va piano va sano...

  10. #10
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Points : 50
    Points
    50
    Par défaut
    Ok merci, je vais essayer ca.

  11. #11
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Pourquoi ne pas utiliser le message OnKeyDown?

    Ca parait très pratique, mais je viens d'essayer, et je ne parviens pas à l'utiliser: il ne vient pas dans le fonction OnKeyDown() quand je presse une touche du clavier. Je ne comprends pas pourquoi.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  12. #12
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par r0d
    Pourquoi ne pas utiliser le message OnKeyDown?
    Tu veux dire pour savoir quand redonner le focus à ma dialog principale??? C'est une bonne idée je n'y avais pas pensé... Merci

  13. #13
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par benahpets
    Citation Envoyé par r0d
    Pourquoi ne pas utiliser le message OnKeyDown?
    Tu veux dire pour savoir quand redonner le focus à ma dialog principale??? C'est une bonne idée je n'y avais pas pensé... Merci
    Oui, ça me semblait être une bonne idée, mais comme je l'ai dit, je ne parviens à le faire fonctionner.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  14. #14
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par matazz
    Alors essaye te mettre le focus sur ta CDialog...
    je n'y arrive pas

    J'ai essayé
    mais ça ne marche pas

    Comment faire?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

Discussions similaires

  1. [MFC] (SDI) raccourcis clavier
    Par tut dans le forum MFC
    Réponses: 6
    Dernier message: 07/04/2006, 11h37
  2. Réponses: 2
    Dernier message: 01/12/2005, 12h24
  3. Réponses: 2
    Dernier message: 21/04/2005, 12h18
  4. [MFC] Appel d'une dialog
    Par mac07 dans le forum MFC
    Réponses: 6
    Dernier message: 23/12/2003, 17h52
  5. [] Raccourci clavier pour bouton d'une barre d'outil
    Par Sébastien dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 24/03/2003, 17h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo