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] ça existe les layout ?


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 300
    Billets dans le blog
    2
    Par défaut
    kool, j'ai réussi à terminer mon boulot plus tôt que prévu :o) J'ai donc un peu de temps pour tester ta classe. Seulement, je suis assez nul avec visualC++/MFC , alors j'aurais besoin d'un coup de pouce:

    Je vais tester sur un CDialog, c'est avec ça que je suis le plus à l'aise (enfin, que je galère le moins):
    1/ Puis-je créer un projet classique, basé sur une boite de dialogue, ou dois-je faire autrement?
    2/ J'ai ma CDialog principale TestLayoutDlg, puis-je la faire hériter de ta classe CTplLayout (aulieu de CDialog)? OU alors, dois-je créer une nouvelle DlgBox?
    3/ Pourquoi est-ce que tu met tout ensemble (déclaration/définitions)? Ne vaut-il pas mieux utiliser 2 fichiers (.h, .cpp)?

    merci

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 300
    Billets dans le blog
    2
    Par défaut
    : : : Que vois-je??!? Tu déclare une classe DANS une autre: la classe CItem dans CTplLayout!!! Comment le compilo interprète ça??

  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
    Par défaut
    Citation Envoyé par r0d
    kool, j'ai réussi à terminer mon boulot plus tôt que prévu :o) J'ai donc un peu de temps pour tester ta classe. Seulement, je suis assez nul avec visualC++/MFC , alors j'aurais besoin d'un coup de pouce:

    Je vais tester sur un CDialog, c'est avec ça que je suis le plus à l'aise (enfin, que je galère le moins):
    1/ Puis-je créer un projet classique, basé sur une boite de dialogue, ou dois-je faire autrement?
    2/ J'ai ma CDialog principale TestLayoutDlg, puis-je la faire hériter de ta classe CTplLayout (aulieu de CDialog)? OU alors, dois-je créer une nouvelle DlgBox?
    3/ Pourquoi est-ce que tu met tout ensemble (déclaration/définitions)? Ne vaut-il pas mieux utiliser 2 fichiers (.h, .cpp)?

    merci
    la notion de template a ete utilisée pour eviter les notions d'heritage multiples et de multi utilisation (trois classes supportées CDialog etc ..) .
    si ta classe se nomme TestLayoutDlg modifi la declaration et code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // . h
    class TestLayoutDlg : public CTplLayout<CDialog>
    {
    //......
    // code 
    TestLayoutDlg::TestLayoutDlg() : CTplLayout<CDialog>(TestLayoutDlg::IDD)
    {
       //{{AFX_DATA_INIT(TestLayoutDlg)
       //}}AFX_DATA_INIT
    }
    il suffit juste de rajouter CTplLayout<...> sur la classe de base ....
    apres voir mon post et le sample fournit .
    il n'y a pas deux sources .h et cpp parce que sinon dans le cas d'un template ça ne compile pas du moins avec VC6.0.
    J’ai tout a fais le droit de déclarer une classe a l'intérieur d'une autre classe, ça limite sa portée d'utilisation à la classe container et sa visibilité c'est tout .

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 300
    Billets dans le blog
    2
    Par défaut
    J'ai récupéré ton exemple. C'est un projet SDI, isn't it? alors j'ai rajouté des boutons un peu partout sur la Dialog (ID:IDD_TESTMDILAYOUT_FORM), et ça plante sur la fonction AddControl(), 4eme ligne: ScreentoClient(item.m_rcControl). item contient des valeurs erronées.
    Faut-il déclarer une variable membre pour chaque bouton? Qu'ai-je oublié?

  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
    non c'est un projet MDI ...
    montre ton initialisation dans OnInitialUpdate .
    il n' y a pas besoin d'avoir une variable attachée au controle .
    si ça plante c'est que la ressource n'est pas dispo , bizar .

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 300
    Billets dans le blog
    2
    Par défaut
    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
    void CTestMdILayoutView::OnInitialUpdate()
    {
    	CFormView::OnInitialUpdate();
     
        CChildFrame *pChild=static_cast<CChildFrame *>(GetParentFrame());
     
        if(pChild->GetInitialRectFrame().IsRectNull()) 
        {
            ResizeParentToFit();        
        }            
     
        AddControl(IDC_STATICLIB,eSizeType::sizeResize,eSizeType::sizeRepos);
    	AddControl(IDOK,eSizeType::sizeRepos,eSizeType::sizeNone);
    	AddControl(IDCANCEL,eSizeType::sizeRepos,eSizeType::sizeNone);
     
        InitDialog(pChild->GetInitialRectFrame(),FALSE);
     
    	// initialisation de la DialogBar
     
    	pChild->m_DlgBar.InitDialog();
     
    }
    je n'ai rien touché

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 300
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void CTplLayout<GENERIC_LAYOUT>::AddControl(const UINT resID,const eSizeType xsize,const eSizeType ysize,const bool bFlickerFree)
    {
    	CItem item;
     
    	// create the new item
    	CWnd *pWnd=GetDlgItem(resID);
    	pWnd->GetWindowRect(item.m_rcControl);
    ...
    il plante sur GetWindowRect() en fait. Je n'arrive pas à aller dans le code de cette fonction pour voir ce qu'il s'y passe

    voic le code d'erreur:
    Exception non gérée à 0x7c28e64a (mfc71d.dll) dans TestMdILayout.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000020.

  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
    beu c'est quoi le pb ? ,j'ai rajouté des boutons dans la view ça fonctionne j'ai pas de pb .
    tu as fais quoi exactement ?

  9. #9
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 300
    Billets dans le blog
    2
    Par défaut
    j'ai rajouté des boutons sur le formview J'ai copié 6 fois le bouton "ok" et je les ai mis un peu partout dans la fenêtre. Rien de plus.

    l'erreur dont je te parle viens du fait que pWnd = 0x000000000

  10. #10
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 300
    Billets dans le blog
    2
    Par défaut
    :trouve: c'est quand j'enlève le static "A faire: placez les controles de formulaires sur cette boite de dialogue" que ça plante!!!

  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
    si ça plante ça veut dire que l'identifiant n'existe plus dans la ressource ..
    c'est quel identifiant IDOK ?
    verifis que les identifiants passés a addcontrol existent bien dans la ressource ...


  12. #12
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 300
    Billets dans le blog
    2
    Par défaut
    ok, ça marche, et je commence à comprendre!
    bon, je vais essayer de comprendre ce que tu as fais. Il va donc me falloir comprendre les templates, connaitre un minimum sur les projet MDI, et me plonger dans ton code... une bonne soirée et une bonne nuit de dev en perspective

    en tout cas, encore et

  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
    j'ai rajouté des explications dans le post it.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. existe t il les layout normal dans netbeans 6.9
    Par dearraed dans le forum NetBeans Platform
    Réponses: 0
    Dernier message: 29/07/2010, 19h40
  2. Réponses: 15
    Dernier message: 18/01/2005, 23h18
  3. [MFC] problème avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    Réponses: 12
    Dernier message: 11/06/2004, 15h31
  4. [MFC][Toolbar] Aligner les toolbars
    Par 6psyk9 dans le forum MFC
    Réponses: 3
    Dernier message: 17/05/2004, 21h58
  5. Réponses: 4
    Dernier message: 16/03/2004, 18h03

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