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] Clic sur boutons ds un CDialog gérés par la view


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut [MFC] Clic sur boutons ds un CDialog gérés par la view
    Bonjour,

    J'ai une CDialogBar avec des onglets et des boutons sur ces onglets.
    Je voudrais que le clic sur un des boutons soit récupérés par la View de mon projet. Je l'ai donc associé de cette façon au niveau du Class Wizard :les évènemtns ne sont aps récupérés par la classe correspondant à ma dialogue (un des onglets) , mais apr la view ...
    Et O surprise, le clic n'entraine pas le déclenchement du handler :-(

    Est-ce que ça vous évique qqch ? Est-ce que ça peut venir du fait que j'ai des onglets ?

    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Alors g essayé de laisser les handlers dans la classe associé à ma boite de dialogue représentant l'onglet ... mais il faut faut qd même utiliser une méthode de la View de mon projet ...

    Le pb, c que quelque soit l'endroit (mainframe par exempel) l'utilisation de CMonProjetView est interdite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void CMainFrame::DefinirScenario()
    {
    	CMaquette_visView * pView = ((CMaquette_visView *)GetActiveView());
    	pView->GetDocument()->AfficherMesBatiments();
     
    }
    erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Compiling...
    MainFrm.cpp
    C:\maquette_vis_demo\code\MainFrm.cpp(483) : error C2027: use of undefined type 'CMaquette_visView'
            c:\maquette_vis_demo\code\tabctrldlg.h(16) : see declaration of 'CMaquette_visView'
    C:\maquette_vis_demo\code\MainFrm.cpp(483) : error C2227: left of '->GetDocument' must point to class/struct/union
    C:\maquette_vis_demo\code\MainFrm.cpp(483) : error C2227: left of '->AfficherMesBatiments' must point to class/struct/union
    Error executing cl.exe.
    ... alors que si j'enlève la ligne "pView->GetDocument()->AfficherMesBatiments();" et bien ça compile !!

    Je comprend rien :-( Aidez moi svp c urgent

  3. #3
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    t'aurais pas oublié #include "Maquette_visView.h" ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Bha peut être ... c'est ce que je commenças à me dire ... mais pkoi ça compile alors???

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Et puis, je crois que c l'embreouille ds mes include .... comment faire pr avoir des includes "propres" ? Paske là si je rajoute un #include "maquette_visView.h" dans mon mainFram.h ou .cpp, bah ça me pond des erreurs de truc s pas reconnus dans mon Doc ...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa =))))

    C'était bien une histoire d'include ... g un peu tout chamboulé au niveau des ioncludes et ça al'air de amrcher now =)

    Comment faire pr ne aps avoir des pb d'include ? Les mettre tous ds un même ficher qu'on inclut ? j'aimerai bien aovir un avis là dessu =)

    Merci en totu cas !

  7. #7
    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
    C'est une solution de mettre tous les #include dans le même fichier. Par contre dès que tu touches un de ces .h, la recompilation est totale

  8. #8
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    Comment faire pr ne aps avoir des pb d'include ?
    en mettre de moins possible dans les fichier .h et les mettres dans les .cpp

    pour ton cas, le mettre dans le .cpp aurait suffit puisque c'est pour une variable locale.

    Avantage de mettre au maximum dans les .cpp :
    evite les dependances circulaires dans les inclusions ( le plus important )
    evite les doubles declarations de classe à la compile
    evite de compiler tout le projet si on ajoute un espace

    inconvéniant :
    risque de multiplication d'include en entete de fichier

  9. #9
    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 ,
    en ce qui concerne ton pb pour recuperer le click boutton sur la view,
    de base comme ça c'est pas prevu .
    mais en magouillant c'est possible...
    voici comment proceder:
    recuperer et enlever la notification de message du click boutton sur la dialogbar et le mettre dans la view (à la main Couper/Coller):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BEGIN_MESSAGE_MAP(CTestDlgBarView, CFormView)
    	//{{AFX_MSG_MAP(CTestDlgBarView)
    		// NOTE - the ClassWizard will add and remove mapping macros here.
    		//    DO NOT EDIT what you see in these blocks of generated code!
    	//}}AFX_MSG_MAP
    	// Standard printing commands
    	CFormView::OnFilePrintPreview)
    	ON_BN_CLICKED(IDC_BUTTON, OnButton)
    END_MESSAGE_MAP()
    exemple ici avec le button IDC_BUTTON.
    faire pareil avec la fonction du click (OnButton dans l'exemple).
    declarer une variable membre boutton dans la view.
    sur le OnInitialUpdate de la view faire un subclass du bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void CTestDlgBarView::OnInitialUpdate()
    {
       CFormView::OnInitialUpdate();
       GetParentFrame()->RecalcLayout();
       ResizeParentToFit();
     
       CMainFrame *pFrame=(CMainFrame *)GetParentFrame();
       pFrame->m_DlgBar.OnInitDialog();
       m_Button.SubclassDlgItem(IDC_BUTTON,this);
    }
    ça doit fonctionner.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Oulà =) je vais méditer ça =)

    en attendant, j'ai trouvé une solution :
    - handler ds la CDialog
    - appel d'une méthode de la Mainframe ds le handler
    - méthode de la mainframe appelant une méthode du doc ou de la view au choix

    Merci bien qd même !! :-)

    A très bientôt surement =))

    D'ailleurs je vais poster un msg concernant une boite permettant de choisir une couleur si tu veux =)

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

Discussions similaires

  1. [VB.NET] Trouver un handle, simuler clic sur bouton
    Par 6su7 dans le forum Windows Forms
    Réponses: 33
    Dernier message: 21/08/2006, 09h38
  2. Désactivation et détection de clic sur bouton radio
    Par Prue dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 21/04/2006, 13h50
  3. charger nouvelle page par clic sur bouton (pas pop-up)
    Par michaelbob dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/09/2005, 16h04
  4. Réponses: 11
    Dernier message: 15/06/2005, 15h31
  5. Detection clic sur bouton precedent
    Par shaun_the_sheep dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 20/10/2004, 17h18

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