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] débutant : Simuler un clic bouton / pointeur


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 65
    Points : 43
    Points
    43
    Par défaut [MFC] débutant : Simuler un clic bouton / pointeur
    Bonjour à tous

    je souhaite simuler l'appui d'un bouton (IDC_RESETBOUTON) faisant appel à la fonction OnBnClickedResetbouton.
    Mon Problème est que ce bouton est situé sur la fenetre principale(CAngelView) et je dois faire l'appel d'une boite de dialogue non modale(CAfficherP) qui reste affichée.


    Apres lecture de la faq : Comment simuler un click sur un CButton ?

    j'ai testé : l'appel direct de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CAngelView::OnBnClickedResetbouton()
    il ne connait pas la fonction. logique, on n'est pas dans la meme classe

    j'ai testé : l'envoie d'un message directement au bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GetDlgItem(IDC_RESETBOUTON)->PostMessage(WM_KEYDOWN,' '); 
    GetDlgItem(IDC_RESETBOUTON)->PostMessage(WM_KEYUP,' ');
    Provoque une assertion failed. "this" pointe sur la dialogue et forcement il ne trouve pas le bouton.

    Comprenant (j'espère ! ) qu'il fallait expliquer que le bouton était sur la fenetre principale, j'ai essayé de créer un pointeur sur le bouton mais sans succés. je me perds dans les GetDlgItem(), GetActiveFrame(), GetActiveView(), AfxGetApp() ...

    : 2 de mes nombreux essais infructueux : :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CFrameWnd * pFrame=static_cast<CFrameWnd *>(AfxGetMainWnd())->GetActiveFrame(); 
    (pFrame->GetDlgItem(IDC_RESETBOUTON))->PostMessage(WM_KEYDOWN,' ');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CButton * pButton=NULL;
    pButton = (CButton*)GetDlgItem(IDC_RESETBOUTON);
    pButton->PostMessage(WM_KEYDOWN,' ');
    d'avance pour votre aide.

  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,
    pour appeler la fonction il faut un pointeur sur la classe de destination...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pAngelView->OnBnClickedResetbouton();
    tout est une affaire de contexte...
    pareil pour le GetDlgItem ,il ne peut etre fait qu'a partir de la fenetre ou est situé le controle donc avec un pointeur sur la vue.


  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    GetDlgItem(IDC_RESETBOUTON)->SendMessage(BM_CLICK, 0, 0);

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 65
    Points : 43
    Points
    43
    Par défaut
    Salut Farscape

    pour ton aide.

    voici ma 2eme mouture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CFrameWnd *pFrame=static_cast<CFrameWnd *>(AfxGetMainWnd())->GetActiveFrame();
     
    CAngelView *pAngelView=static_cast<CAngelView *>(pFrame->GetActiveView()); 
     
    pAngelView->OnBnClickedResetbouton();
    il me genère une erreur à la 2eme ligne en disant qu'il ne connait pas CAngelView.

    j'ai remplacé CAngelView par CFormView. Plus d'erreur à la 2eme mais evidemment la fct ne dérive pas de CFormView donc il ne la trouve pas.


    j'ai ajouté dans le .cpp en question pensant que ça allait résoudre le problème
    ça me génère plein d'erreurs dans angelView.h alors qu'il ne trouvait rien avant. ça sent les erreurs bidon !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    error C2143: erreur de syntaxe : absence de ';' avant '*'
    error C2501: 'CAngelView::CAngelDoc' : Spécificateurs de type ou de classe de stockage manquants
    error C2501: 'CAngelView::GetDocument' : Spécificateurs de type ou de classe de stockage manquants
    warning C4183: 'GetDocument' : type de retour manquant ; fonction membre retournant 'int' assumée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //  morceau de AngelView.h incriminé 
    // Attributes
     
     
    public:
    CAngelDoc* GetDocument();         // <<<<------------- ERREUR
    CArray<CEdit *,CEdit *> m_ctrlnom;
    CArray<CEdit *,CEdit *> m_ctrlprenom;

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Essaie en déclarant (sans la définir) la classe CAngelDoc dans AngelView.h

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    ou rajoute le header de ton document dans le .cpp concerné avant celui de la vue.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 65
    Points : 43
    Points
    43
    Par défaut
    Salut Médinoc

    j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // AngelView.h
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
     
    class CAngelSet;
    class CAngelDoc;         << -----------
     
    class CAngelView : public CFormView
    Je l'ai mis où tu voulais ??
    Si oui, ça ne change pas le problème.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 65
    Points : 43
    Points
    43
    Par défaut
    L'union fait la force !!

    l'association des deux propositions solutionne le problème.

    à tous les deux.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/08/2012, 20h13
  2. Simuler le clic sur le bouton OK d'une fenêtre
    Par msprittc dans le forum Delphi
    Réponses: 5
    Dernier message: 25/09/2006, 19h43
  3. Réponses: 18
    Dernier message: 07/06/2006, 16h16
  4. [VB.NET]Simuler un clic sur un bouton
    Par olbi dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/03/2006, 12h46
  5. Réponses: 4
    Dernier message: 28/02/2006, 15h25

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