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 :

Problèmes avec des vues


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Points : 17
    Points
    17
    Par défaut Problèmes avec des vues
    Bonjour à tous,

    J'ai un gros problème avec des vues. Je travaille avec l'architecture Doc/Vue et je dois afficher plusieurs images alors pour ce faire, je crée des vues (quand je crée une vue, je la rend active et j'affiche mon image, j'en crée alors une autre etc...) cela fonctionne très bien la première fois mais lorsque je dois faire un raffraichissement, je ne sais pas comment réafficher mes images puisque lorsque toutes les images sont affichées, le programme s'arrête et c'est la dernière vue créée qui est active et lorsque je bouge la fenêtre, tout s'efface.
    Je voudrais alors savoir comment faire pour réafficher les images dans les vues lorsqu'elles sont toutes créées et affichées sur l'écran.

    Ma première idée fut de supprimer toutes les vues, puis de les recréer pour réafficher les images à chaque raffraichissement, mais je ne sais pas comment supprimer les vues, alors si qqun a une petite idée...

    Merci d'avance
    Cordialement
    hasna

  2. #2
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Points : 17
    Points
    17
    Par défaut
    En fait, si on réussi à récupérer le pointeur sur une vue à chaque fois qu'elle est créée et que l'on stocke ce pointeur dans un tableau, on pourrait peut être rendre active les vues une à une (lors du raffraichissement) et réafficher alors son contenu.

    Peut etre est ce une meilleur idée mais le problème est de pouvoir récupérer le pointeur sur les vues créées...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 92
    Points : 55
    Points
    55
    Par défaut
    Si tu utilise un projet de type MDI les vues sont créées et gérées toute seul par le projet.

    Tu ne doit que remplir le fichier VIew mais le cadre se débrouille tous seul.

    Comment fait-tu?

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Points : 17
    Points
    17
    Par défaut
    J'ai un élément de menu auquel j'associe une fonction. Dans celle ci je fais une boucle sur le nombre d'images à afficher. Dans cette boucle, je créé une nlle fenêtre et je fais un UpdatAllViews() pour afficher l'image (car cette dernière méthode fait qu'on repasse dans OnDraw(CDC* pDC) dans quoi j'ai mis mon code permettant d'afficher l'image). Donc finalement, à chaque fois que j'affiche une image, je crée une fenêtre, je la rend active et j'affiche. Mais finalement, ya un problème de raffrachissement !!!

    Oui je suis en MDI

  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,
    si tes view font partie du meme document l'appel de la methode UpdateAllViews sur le document provoquera un raffraichissement des views.
    maintenant si tu a un ou plussieurs template associe à des documents (le cas le plus complique )
    tu peux parcourir tous les templates en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CWinApp::GetFirstDocTemplatePosition
    /*(CWinApp::)*/ CDocTemplate* GetNextDocTemplate( POSITION& pos ) const;
    ayant acces au document tu retombes dans le cas UpdateAllviews.
    le dessin de tes images doit etre mis dans la fonction OnDraw de la view.

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Points : 17
    Points
    17
    Par défaut
    J'ai plusieurs vues d'un même document !!!
    Lors d'un UpdateAllViews(), on repasse dans la méthode OnDraw() et c'est la dernière image qui s'affiche alors sur toutes les vues car j'ai un tableau d'images que je stocke dans m_pImage et j'incrémente le nombre d'image à chaque fois que je crée une vue donc finalement lorsque je passe dans OnDraw(), c'est la dernière image qui s'affiche sur toutes les vues...

    J'espère que je suis assez clair:

    OnAfficheImage()
    {
    for(int i=0;i<NbImages;i++)
    {
    m_nNumImage=i;
    //la je crée une nlle vue
    }

    }

    onDraw(CDC* pDC)
    {

    pDC->SetPixel(0,0,m_pImage[m_nNumImage]);

    }

    Voilà et j'ai tjrs mon problème de raffraichissement !!!

  7. #7
    Membre habitué Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Points : 197
    Points
    197
    Par défaut
    Une solution à vue de nez : l'ensemble des images devrait être stocké dans le doc et il faudrait que chaque vue mémorise l'indice de l'image qu'elle se destine à afficher.
    Tu passes l'indice de l'image au constructeur de la vue dérivée de CView, celui-ci le mémorise dans une variable membre et OnDraw() affiche alors l'image adéquate.
    A moins que je n'ai rien compris, tes explications sont un peu difficiles à suivre.
    Les orteils servent à trouver les pieds de chaise et les montants de porte quand il fait noir.

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    et si tu stockais l'indice de ton tableau dans une donnée membre pour chaque vue à la creation tu ne devrais plus avoir de pb au moment du ondraw non ?


  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Points : 17
    Points
    17
    Par défaut
    Oui mes images sont bien stocké dans mon doc !!!
    Mais comment faire pour que chaque vue mémorise d'indice de l'image qu'elle affiche. En fait je ne sais pas comment identifier une vue après sa création pour lui associer une donnée relative à l'image qu'ellle doit afficher !!!
    Alors si qqun sait comment identifier une vue...

    "Tu passes l'indice de l'image au constructeur de la vue dérivée de CView" ::coment faire ça ??? comment récupérer une vue pour pouvoir lui passer qqchose ???

    Merci D'avance

  10. #10
    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 y a <> methodes moi je me suis invente un systeme de message a destination de la view qui va etre créee .
    la methode simple tu stocks la valeur dans une variable de la classe application sur le constructeur de la view tu la recuperes et la stock
    avec un petit mutex sur l'acces à la variable ca doit etre bon.

  11. #11
    Membre habitué Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Points : 197
    Points
    197
    Par défaut
    En fait je ne sais pas comment identifier une vue après sa création pour lui associer une donnée relative à l'image qu'ellle doit afficher !!!
    Ce n'est pas à l'appelant à "identifier la vue", c'est à la vue de se débrouiller toute seule.

    "Tu passes l'indice de l'image au constructeur de la vue dérivée de CView" ::coment faire ça ?
    Tu ajoutes un paramètre dans le constructeur de ta classe dérivée de CView :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CmyView::CMyView(<les paramètres>, int iImageIndex) : m_iImageIndex(iImageIndex)
    {
    }
    L'autre solution c'est de définir un accesseur en écriture sur une variable privée membre de la vue (plutôt que d'accéder directement à la variable définie public). Tu appelles l'accesseur après la création de la vue.

    la methode simple tu stock la valeur dans une variable de la classe application
    Ca va pas non ???
    avec un petit mutex sur l'acces à la variable ca doit etre bon.
    Un mutex ???
    Les orteils servent à trouver les pieds de chaise et les montants de porte quand il fait noir.

  12. #12
    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
    un petit detail la view est creee par un template document de maniere dynamique faudra que tu m'expliques comment tu fais pour lui passer un argument dans le constructeur.


  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
    Points : 17 323
    Points
    17 323
    Par défaut
    et deuxiemement je vois pas ton pb avec les mutex.
    quand a stocker une info dans la classe d'application si c'est bien fait et referencer je vois toujours pas ton pb .

  14. #14
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Points : 17
    Points
    17
    Par défaut
    moi je ne travaille pas avec plusieurs vues mais plusieurs frame car pour avoir plusieurs fenêtre j'ai fait un CreateFrame dans ma classe CAppliApp. Alors je voudrais simplement pouvoir récupérer un identifiant de mes frames créées, ça doit surement être possible !!!

  15. #15
    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
    tu veux dire CreateNewFrame ?

  16. #16
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Points : 17
    Points
    17
    Par défaut
    Oui c'est ça que j'utilise pour créer des fenêtres et j'y affiche alors mes images !!!
    C'est plus clair ???

  17. #17
    Membre habitué Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Points : 197
    Points
    197
    Par défaut
    un petit detail la view est creer par un template
    Ah bon ? C'est marqué où ??? Le post initial ne signale rien à ce sujet. Ce n'est pas obligatoire, renseigne-toi. D'autre part, si le passage de paramètre par le constructeur n'est pas possible, rien n'empêche en revanche d'utiliser un accesseur, comme je le signale dans mon post, que tu fais semblant de ne pas avoir lu.
    C'est une approche objet, c'est tout. Beaucoup plus saine que de déclarer les variables dans l'objet application.

    et deuxiemement je vois pas ton pb avec les mutex.
    Personnellement je n'en ai pas. Un mutex est totalement hors-sujet ici. Merci de te documenter avant de raconter n'imprte quoi.

    quand a stocker une info dans la classe d'application si c'est bien fait et referencer je vois toujours pas ton pb .
    Encore une fois ce n'est pas mon problème. Si tu t'amuses à déclarer des variables à tort et à travers dans la classe application, c'est toi qui a un problème...
    Les orteils servent à trouver les pieds de chaise et les montants de porte quand il fait noir.

  18. #18
    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
    D’abord si c'est possible j'aimerais que la discussion soit moins "claquante "
    on est pas à okcoral
    je ne pense pas avoir ete désobligeant ,je commence a le prendre comme ça.
    si je parle de document template c'est que c'est la méthode couramment usité on a un template de document on creer une frame par createnewframe comme dady l' a fait ou on passe par opendocumentfile etc..
    je reste donc dans un cadre géneral .
    Pour revenir au pb de dady l'id de l'image doit être passer à la view creer l'utilisation de l'accesseur me semble difficile à implémenter, mais si tu a une solution aussi simple qui fonctionne (et dans le contexte de dady)
    Je sais rester humble et j'attends de voir je suis preneur.

  19. #19
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Points : 17
    Points
    17
    Par défaut
    Merci farscape !!! Mais je sais toujours pas comment faire pour associer à chaque frame une image !!! donc je cherche comment récupérer un pointeur sur une frame si bien sur c'est possible...

  20. #20
    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
    CreatenewFrame renvoi un pointeur sur la CFrameWnd .


Discussions similaires

  1. Problème avec des onglets de la même vue
    Par Latmy dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 27/04/2007, 15h11
  2. Problème avec des transaction
    Par Oluha dans le forum ASP
    Réponses: 16
    Dernier message: 01/03/2005, 15h40
  3. Problème avec des composants non déclarés
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/01/2005, 11h17
  4. Réponses: 5
    Dernier message: 19/08/2004, 11h11
  5. [STRUTS] Problème avec des ActionForm
    Par zarbydigital dans le forum Struts 1
    Réponses: 2
    Dernier message: 29/03/2004, 13h49

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