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 :

Boite de dialogue MFC


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Points : 81
    Points
    81
    Par défaut Boite de dialogue MFC
    Bonjour,

    Je travaille actuellement sur une application MDI en MFC sous Visual Studio.

    Je veux afficher l'histogramme d'une image qui est stocké dans un tableau 1D.

    Je veux l'afficher dans une boite de dialogue grâce à la fonction OnPaint().

    Ma question est:

    Comment faire passer mon tableau 1D qui est dans le view.cpp dans le .cpp associé à la boite de dialogue?

    Merci d'avance pour votre aide.

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    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 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    en gros, pour afficher la boite de dialogue qui contiens ton tableau, le code va ressembler à quelque chose comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaBoiteDeDialogue dlg;
    dlg.DoModal();
    On voit ici que MaBoiteDeDialogue est une classe. Tu peux donc lui affecter une variable membre qui contiendra ton tableau, ainsi que les fonctions necessaires à sa manipulation. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MaBoiteDeDialogue
    {
    [...]
    public:
    HRESULT FillArray(CArray<int,int>);
    [...]
    private:
    CArray<int,int> m_array;
    [...]
    }
    Du coup, ton code qui va afficher ta boite de dialogue va maintenant ressembler à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaBoiteDeDialogue dlg;
    dlg.FillArray(montableau);
    dlg.DoModal();
    Hope it helps.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Points : 81
    Points
    81
    Par défaut
    Je suis pas un expert en C++, j'ai du mal à comprendre ce que tu m'as indiqué.

    Je me demandais s'il ne serait pas plus simple d'ajouter une variable globale au projet, dans mon cas un tableau 1D et de remplir ce tableau avec les valeurs de l'histogramme.

    Mais je n'ai pas réussi à rajouter ce genre de variable.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Points : 81
    Points
    81
    Par défaut
    Je pense avoir trouvé la solution, peux tu me le confirmer?

    Dans boitededialogue.h, j'ai mis cela:
    public:
    int t[256];


    Dans projetview.cpp j'ai fait:
    for(j=0;j<256;j++)
    boite.t[j]=tableau[j]
    //tableau= tableau contenant l'histogramme

    Dans boitededialogue.cpp, je fais dans la fonction Onpaint
    for(j=0;j<256;j++)
    dc.MoveTo(2*j,150);
    dc.LineTo(200,t[j]);


    En l'occurence ça marche.

  5. #5
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    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 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    Si ça marche, c'est le principal. Ton implémentation correspond, dans l'idée, à ce que je t'avais indiqué. Cependant, et dans une optique purement didactique, je me permettrais quelques remarques:

    1/ Il n'est pas propre de déclarer des variables, et de surcroit un tableau, en public. D'une part ça affaibli le modèle de conception, et d'autre part ça diminue la robustesse du code. En effet, si une variable est publique, elle peut être accédée par tout le monde et de façon sauvage, c'est à dire que tu ne peut en maîtriser les accès.

    2/ Il est très fortement conseiller d'utiliser les bibliothèques à ta disposition lorsque cela est possible. En l'occurence, la stl et la mfc proposent chacune une "structure" "standart" pour les tableaux (la classe std::vector pour la std et le template CArray pour la mfc).
    Je prendrais pour exemple le CArray de la mfc: CArray<int, int> tableau; est l'équivalent (en beaucoup mieux -plus puissant, plus optimisé, plus sécurisé-) que le int[256] tableau;

    Par exemple, le jour où tu veux que ton histogramme prenne 1000 valeurs en abscisse, à la place de 256, et que tu suis les 2 conseils ci-dessus, tu n'aura absolument rien à changer dans ton code.

    Voilà, c'était quelques conseils de base. Si tu veux progresser en c++, je te conseille de les considérer. Maintenant, comme on dit: "mon code marche, j'y touche plus"

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Points : 81
    Points
    81
    Par défaut
    en fait il marche pas du tout

    j'ai testé ton code mais apparemment il marche pas

    j'ai une erreur au niveau de:
    CArray<int, int> tableau;

    il me dit qu'il faut un ; avant le 1° crochet

    j'ai regardé sur msdn et c'est la bonne syntaxe que tu m'as donné

  7. #7
    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,
    dans MSDN il est dit aussi qu'il faut rajouter :
    #include <afxtempl.h>

    à mettre de préférence dans ton stdafx.h.


  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Points : 81
    Points
    81
    Par défaut
    merci farscape pout ton aide, ça m'a supprimé mes erreurs

    en revanche une persiste et est compréhensible à la ligne:
    dlg.FillArray(montableau); car montableau est de type int t[256];

    il ne peut donc pas appliquer la fonction FillArray

    je dois donc le changer de type c'est ça?
    le mettre de type CArray

  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
    oui ,le type doite etre le même .
    dans ta fonction passe une reference en argument .
    pour copier le CArray dans ton tableau local utilise la méthode Copy du CArray.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Points : 81
    Points
    81
    Par défaut
    n'ayant pas encore assez de connaissances en c++ pour appliquer ce que vous m'avez conseillé, je me suis redirigé vers le passage du tableau en int et ça marche

    je me repencherai sur votre méthode dans quelques temps lorsque mes connaissances seront un peu plus importantes.


    Merci pour votre aide.

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/02/2011, 15h01
  2. Réponses: 0
    Dernier message: 02/01/2011, 13h24
  3. compteur de temps dans une boite de dialogue MFC
    Par Espoir27 dans le forum MFC
    Réponses: 6
    Dernier message: 17/05/2010, 12h06
  4. Image en fond de Boite de dialogu MFC
    Par SkulD dans le forum MFC
    Réponses: 5
    Dernier message: 01/04/2008, 15h23
  5. Probleme boite de dialogue MFC
    Par beb30 dans le forum MFC
    Réponses: 5
    Dernier message: 13/04/2006, 15h42

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