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]Touche ALT


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut [MFC]Touche ALT
    Bonjour

    J'ai besoin d'intercepter l'évènement lorsque l'on appui sur la touche ALT.
    Avec On_KeyDown, j'intercepte le message Appui sur la touche CTRL, SHIFT, mais pas ALT.

    Comment faire ?

    Y a t il un autre message Windows à intercepter ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    dans la faq j'ai traite le CTRL + Shift.:
    http://c.developpez.com/faq/vc/?page...hiftorCtrlDown
    pour le ALT gauche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define IsAltDown()( (GetKeyState(VK_LMENU) & (1 << (sizeof(SHORT)*8-1))) != 0   )
    a tester dans le message WM_SYSKEYDOWN.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut
    Merci de m'avoir repondu si vite.

    Je viens d'essayer.
    j'ai copié dans le cpp de ma classe CMainFrame

    #define IsAltDown()( (GetKeyState(VK_LMENU) & (1 << (sizeof(SHORT)*8-1))) != 0 )

    et ca ne marche pas ; je n'arrive pas a intercepter le message WM_SYSKEYDOWN.

    D'autre part je n'ai pas trouvé dans class Wizard le message WM_SYSKEYDOWN.
    Je l'ai donc fait à la main.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    re,
    dans classwizard sur la fenetre/controle en question selectionne l'onglet classinfo et mets windows dans message filter apres tu reviens sur l'onglet message maps et tu trouves le message...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut
    Merci pour le truc !

    J'ai donc bien une méthode On_SysKeyDown mais qui n'est pas appelée lorsque j'appui sur la touche ALT

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    re,
    quelle est la nature de la fenetre ou controle ou tu fais le test ?
    pour mon exemple j'ai fais ça dans une classe derivée d'un CEdit.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut
    J'ai une application SDI.
    J'intercepte le message WM_SYSKEYDOWN dans la classe CMainFrame

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    dans ce cas quelle est le type de la fenetre principale ?
    une CView ,CFormView etc....

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut
    J'ai une classe CWinApp, une classe CVIew et ma classe CFrameWnd dans laquelle l'essai d'intercepter le message WM_SYSKEYDOWN

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    essaye d'intercepter le message sur la CView .

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    je viens de faire l'essai dans le contexte indiqué: SDI fenetre CView j'ai intercepté le message sur la view ça fonctionne.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut
    Le resulat est le meme, ca ne marche pas

  13. #13
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    quelle combinaison de touches tu fais attention c'est le ALT gauche et on ne peut pas tout intercepter a cause des raccourcis claviers et des sequences windows par defaut.
    mon test est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #define IsAltDown()( (GetKeyState(VK_LMENU) & (1 << (sizeof(SHORT)*8-1))) != 0   )
    void CTestsdi2View::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    	// TODO: Add your message handler code here and/or call default
    	if(IsAltDown())
        {
            TRACE("\nAlt");
        }
     
    	CView::OnSysKeyDown(nChar, nRepCnt, nFlags);
    }

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut
    Faut il ajouter le code suivant pour intercepter le message ?

    #define IsAltDown()( (GetKeyState(VK_LMENU) & (1 << (sizeof(SHORT)*8-1))) != 0 )

  15. #15
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    ,j'ai modifié mon post precedent un define ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void CTestsdi2View::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
       // TODO: Add your message handler code here and/or call default
       if(( (GetKeyState(VK_LMENU) & (1 << (sizeof(SHORT)*8-1))) != 0 ))
        {
            TRACE("\nAlt");
        }
     
       CView::OnSysKeyDown(nChar, nRepCnt, nFlags);
    }

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut
    Mon probleme dans un premier temps est que je m'arrive jamais à entrer dans la fonction OnSysKeyDown lorsque j'appui sur ALT.



    Si j'ai bien compris, je test par le code suivant si la touche ALT a ete enfoncée

    if(( (GetKeyState(VK_LMENU) & (1 << (sizeof(SHORT)*8-1))) != 0 ))
    {
    TRACE("\nAlt");
    }

  17. #17
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    reponse oui mais tu m'a pas repondu :
    quelle combinaison de touches tu fais attention c'est le ALT gauche et on ne peut pas tout intercepter a cause des raccourcis claviers et des sequences windows par defaut.
    je rajouterai : la touche alt est un peu particuliere sous windows alors attention ..
    le projet SDI avec une CView que j'ai créé pour l'occasion fonctionnne parfaitement ....

Discussions similaires

  1. [c++] Hook "anti-rebond" et problème touches ALT
    Par jambono dans le forum Windows
    Réponses: 4
    Dernier message: 06/12/2006, 23h25
  2. Interdire les touche ALT F4
    Par phoon dans le forum Access
    Réponses: 1
    Dernier message: 08/03/2006, 17h24
  3. Fiche et Touche ALT
    Par kymine dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2005, 19h31
  4. [MFC] Touche clavier
    Par ArkAng3 dans le forum MFC
    Réponses: 8
    Dernier message: 22/03/2005, 06h50
  5. [MFC] Ctrl/Alt+touches avec PostMessage
    Par Fladnag dans le forum MFC
    Réponses: 4
    Dernier message: 10/02/2004, 14h33

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