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 :

Interception Messages Windows


Sujet :

MFC

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Interception Messages Windows
    Bonjour,
    dans une boîte de dialogue toute bête, je cherche à bloquer certain message windows.
    J'ai un hook qui récupère les messages, je gère ceux concernant le clavier et je voudrais bloquer la touche enter et esc par exemple, de façon à ce que la fenêtre ne se ferme pas.
    En gros j'en suis à récupérer le message dans mon hook mais malheureusement, je n'arrive pas à empêcher ma fenêtre d'avoir le message...
    Si qn a une iD ;oD
    Merci.

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    il suffit re reprendre la main sur OnCommand dans la dialogue:
    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
     
    BOOL CMyDialog::OnCommand(WPARAM wParam, LPARAM lParam) 
    {
    	// TODO: Add your specialized code here and/or call the base class
    	char ClassName[50];
    	CWnd *pWnd = GetFocus();
     
     	switch(wParam)
     	{
    		case IDOK:
    			if(pWnd!=GetDlgItem(m_nIdOk)) 
    			{
      				return FALSE;
    			}
    			break;
    		case IDCANCEL:
    			if(pWnd!=GetDlgItem(m_nIdCancel)) 
    			{
    				return FALSE;
    			}
    			break;
     	}	
    	return CDialog::OnCommand(wParam, lParam);
    }
    exemple pour empecher de sortir par esc ou enter si on n'est pas sur les boutons IDOK et IDCANCEL

  3. #3
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 102
    Points : 111
    Points
    111
    Par défaut
    Intercepte PreTranslateMsg du style ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    BOOL CTESTView::PreTranslateMessage(MSG* pMsg) 
    {
      if(pMsg->message == WM_KEYDOWN)
      {
        if(pMsg->wParam == VK_ESCAPE)
          return TRUE;
      }	
      return CFormView::PreTranslateMessage(pMsg);
    }
    501darts

    Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur.

  4. #4
    Candidat au Club
    Inscrit en
    Décembre 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    nickel les ptits gars, ça répond bien à ma première demande !!!!
    C bien plus propre que de faire un hook je vous l'accorde.
    Maintenant, je cherche à avoir le message clavier return donc ça pas de pb mais aussi le shift+return et là pb, j'arrive à les avoir indépendemment, mais impossible de les avoir ensembe.
    je n'arrive pas à identifier le flag que je pouvais avoir avec OnKeyDown(...)
    quelle partie du message dois je analyer ?

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut, lors du test de la touche vk_return essaye d'utliser cette macro pour savoir si la touche shift est enfoncée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define IsShiftDown()	( (GetKeyState(VK_SHIFT) & (1 << (sizeof(SHORT)*8-1))) != 0   )
    // au passage la touche ctrl.
    #define IsCtrlDown()	( (GetKeyState(VK_CONTROL) & (1 << (sizeof(SHORT)*8-1))) != 0 )
    ca peut etre mis sous forme de fonctions evidemment ...

  6. #6
    Candidat au Club
    Inscrit en
    Décembre 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Parfait ça marche exactement comme je le voulais.
    Merci bcp à tous les 2.
    @ plut'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intercepter messages windows en C#
    Par KRis dans le forum C#
    Réponses: 11
    Dernier message: 04/10/2011, 12h29
  2. Intercepter les messages windows
    Par schneed dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/12/2005, 14h12
  3. Interception des messages windows
    Par sunchai dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/08/2005, 10h31
  4. Intercepter un Message Windows ? Créer un Composant Grille !
    Par TOTO32 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 21/07/2004, 13h41
  5. Réponses: 2
    Dernier message: 06/04/2004, 08h39

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