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 :

Probleme avec WM_HOTKEY et ON_WM_KEYDOWN [FAQ]


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Par défaut Probleme avec WM_HOTKEY et ON_WM_KEYDOWN
    bonjour;
    je suis entrain de devellopper un application pouvant lire les DVD et peremettantd ef aire des mesures de temps entre 2 evenement sur la video.
    je voudrais pour accelerer l'utilisation du logicielle implementer de touche raccourci tel que appuyer sur espace pour lecture/pause, "1","2"..."9" pour marquer un evenement de type 1,2,...9 etc

    j'ai reussis a utiliser WM_HOTKEY

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    BEGIN_MESSAGE_MAP(Crendu_finalDlg, CDialog)
    	...
    	ON_MESSAGE(WM_HOTKEY,OnHotKey)
    	...
    END_MESSAGE_MAP()
     
    class Crendu_finalDlg : public CDialog, public IDvdCallback
    {
    ...
    afx_msg LRESULT OnHotKey(WPARAM wParam, LPARAM lParam);
    ...
    }
     
    LRESULT Crendu_finalDlg::OnHotKey(WPARAM wParam, LPARAM lParam)
    	{	
     
    	if(hotkey_disable_events==true)
    	{
    		switch (wParam)
    		{
    		case 0:
    			MessageBox("0");
    			OnBnClickedButton8();
    			break;
    ...
     
    		default:
    			MessageBox("sould not happen");
    		}
    	}
     
    		return 0;
    }
    et finalment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	RegisterHotKey(this->m_hWnd,0,MOD_SHIFT,'0');
    	UnregisterHotKey(this->m_hWnd,0);
    pour ajouter ou enlever une hotkey.

    mon problem est le suivant: je ne veus pas que l'utilisateur esta appuier sur une combinaison de touche.
    cad au lieu de faire shift+0 qu'il est jsute a faire 0

    pour cela j'ai commencer a regarde le ON_WM_KEYDOWN:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    BEGIN_MESSAGE_MAP(Crendu_finalDlg, CDialog)
    	...
    	ON_WM_KEYDOWN()
    	...
    END_MESSAGE_MAP()
     
     
     
    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
     
     
     
    void Crendu_finalDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    	switch(nChar)
    	{
    	case VK_RETURN:
    		AfxMessageBox("You pressed Enter");
    		break;
    	case VK_F2:
    		AfxMessageBox("Help is not available at the moment");
    		break;
    	case VK_DELETE:
    		AfxMessageBox("Can't Delete This");
    		break;
    	default:
    		AfxMessageBox("Whatever");
    	}
    }

    mais quand j'appuie sur le touche F2 delete ou entrer rien ne se passe et j'ai verifier et mon progrmme ne rentre pas dans OnKeyDown

    est ce que quelqu'un peu me dire comment modifier le WM_HOTKEY pour ne pas avoir a faire de combinaison de touche ou alors ce que je suis entrain de rater dans ON_WM_KEYDOWN?
    merci d'avance
    jason

    merci de mettre les balises [ code ] à l'avenir, nico-pyright(c) / modérateur visual c++
      0  0

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Quel est le type de ton application : dialog, SDI, MDI, autre ?

    Ce que je ne comprends pas trop dans ton affaire, c'est qu'en principe en MFC, la gestion des raccourcis clavier est prise en charge par le framework : grosso modo il y a juste à définir les hotkeys dans l'éditeur de ressources et implémenter ensuite les handlers ON_COMMAND...

    Donc pourquoi toutes ces complications ??
      0  0

  3. #3
    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
      0  0

  4. #4
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Par défaut
    je travail sur une application de type dialogue,
    rigobert j'ai essayer d'utiliser les ressource comme tu as surgerrer et c'est sur que sa me simplifirais la vie si j'arrivais a le faire marchais sous une application MFC de type dialogue mais j'ai seulement reussis a creer des raccourcies qui marche sous une application de type sdi(single document)
    si quelqu'un sais ce qu'il faut que j'ajoute dans mon application de type dialogue pour que les raccourci des ressource marche?

    farscape
    j'avais deja fait un tour des conversations sur le forum pour voir si le sujet n'avais pas etait aborder et je suis tomber sur ta FAQ mais tu n'explique pas dans ta FAQ c'est comment distinguer les divers touche qui ont etait saisie. Dans le premier exemple de code que j'ai mis il faut renseigner les differente touche racourcie que l'on veus, et dans la solution que propose rigobert c'est visual studio qui les ajoute dans ton code...
      0  0

  5. #5
    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
    c'est exact les accerateurs claviers ne fonctionnent pas pour une CDialog
    il faut proceder comme suit:
    déclarer une variable :
    dans la classe dialogue.
    Ensuite dans OnInitDialog on va lire la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_hTable = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
    Enfin il ajouter la fonction PreTranslateMessage avec l'assistant et mettre le code qui suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
     {
       if (m_hTable  && ::TranslateAccelerator(m_hWnd, m_hTable, pMsg))
                  return(TRUE);
          return CDialog::PreTranslateMessage(pMsg);
    }
      0  0

  6. #6
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Par défaut
    Merci a tout les 2 de m'avoir aider sur ce coup la
    en utilisant le accelerator dans les resources et en utilisant surdefinissant la fonction pre translate message message j'y suis arriver
      0  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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