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 :

Plusieurs View dans une MFC et affichage opengl


Sujet :

MFC

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Plusieurs View dans une MFC et affichage opengl
    Bonjour,
    Je suis en train de créer une application mfc en sdi. J'ai créé des splitters pour diviser ma fenêtre principale en 4 vues. Pour cela j'ai défini 4 classes de type CView. Le but de ce programme est d'afficher de l'opengl dans chacune de ces frames. Le problème est que pour utiliser mon code opengl, je suis obligé de faire un CPaintDC(this) (enfin je crois...), ça marche très bien pour l'une des vues qui doit être considérée par Visual comme la principale par défaut, mais pour les autres je n'arrive pas en fait à reprendre la main pour afficher mes objets en opengl.....Donc comment faire pour reprendre la main sur mes 3 autres vues et utiliser l'opengl??
    Merci 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,
    chaque view dispose d'une fonction de dessin : OnDraw(CDC *pDC).
    c'est la que tu dois placer ton code de dessin.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui, j'ai déjà testé comme le montre le code ci-dessous:
    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
    23
    24
    25
    26
    27
    28
    29
     
    void LeftView::OnDraw(CDC* pDC)
    {
    CDocument* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
     
     
    glMatrixMode(GL_MODELVIEW);
    glClear(GL_COLOR_BUFFER_BIT);
     
    glBegin(GL_POLYGON);
            glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
            glVertex2f(100.0f, 50.0f);
            glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
            glVertex2f(275.0f, 400.0f);
            glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
            glVertex2f(450.0f, 50.0f);
    glEnd();
     
    glFlush();
     
    CRect r1(0,0,100,100);
    CPen pen(PS_SOLID,1,RGB(0,0,255));
    CBrush brush(RGB(0,255,0));
    pDC->SelectObject(&pen);
    pDC->SelectObject(&brush);
    pDC->Rectangle(r1);
    pDC->DrawText("LEFT VIEW",r1,DT_CENTER);
    }
    Mon rectangle s'affiche bien dans la vue, mais pas mon opengl
    [a l'avenir pense a mettre la balise code ,Merci Farscape]

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai l'impression que ça marche qu'à condition que j'ai dans ma fonction OnPaint() :

    CPaintDC dc(this); // device context for painting
    .....
    SwapBuffers(dc.m_ps.hdc);

    ça marche très bien pour la classe view que visual considère comme principale, mais dans mes autres classes de vue, ça plante.....

  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
    hum effectivement d'apres ce que j'ai vu la sequence type serait plutot:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     // TODO: Add your message handler code here
      HDC hdc = ::GetDC(m_hWnd);
      HGLRC hglrc;
     
      // TODO: Add your message handler code here
      glClearColor(0,0,0,0);
      glColor3f(1, 1, 1);
     
      if (hglrc = wglCreateContext(hdc))
      {
        // try to make it the thread's current rendering context
        if(wglMakeCurrent(hdc, hglrc))
        {
          //render here
          glClear(GL_COLOR_BUFFER_BIT);
          glBegin(GL_TRIANGLES);
          glColor3f(1, 0, 0);
          glVertex3f(.5, 0, 0);
          glColor3f(0, 1, 0);
          glVertex3f(0, .5, 0);
          glColor3f(0, 0, 1);
          glVertex3f(-.5, 0, 0);
          glEnd();
          SwapBuffers(hdc);
        }
      }
     
      wglMakeCurrent(NULL, NULL) ;
      ::ReleaseDC (m_hWnd, hdc) ;
      wglDeleteContext(hglrc);

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Non, ça ne marche pas, mais je pense que ça vient plus de comment j'ai créé mes divisions de fenêtres. Dans ClassWizard, j'ai la possibilité de rajouter la fonction OnPaint() (à partir de WM_PAINT) qu'avec ma classe View qui est considérée comme la principale, pas avec les autres ou là j'ai que "COMMAND" et "UPDATE_COMMAND_UI"....

  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
    ça plante sur quoi ?

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Avec ton code ça ne plante pas, mais rien ne s'affiche....Sinon, avec la fonction OnPaint que je suis obliger de rajouter à la main car elle n'apparait pas dans le classwizard, ça plante sur le CPaintDC dc(this)

  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,
    j'ai fais un projet sample SDI avec trois volet (trois fois la meme view).
    http://farscape.developpez.com/Samples/SDIOpenGL.zip


  10. #10
    mat.M
    Invité(e)
    Par défaut
    C'est soit l'un soit l'autre il me semble ( à vérifier ) : ou le GDI ou OpenGL mais pas les 2 en même temps parce qu'un affichage va écraser l'autre.
    Et il me semble qu'il faille appeler constamment glBegin et glEnd; c'est à dire que l'appli doit constamment boucler sur le rendu.

Discussions similaires

  1. Affichage de plusieurs courbes dans une fonction
    Par Seikyo67 dans le forum MATLAB
    Réponses: 14
    Dernier message: 21/05/2014, 10h03
  2. Autocomplétion avec affichage de plusieurs champs dans une liste
    Par chewing-gum dans le forum ASP.NET Ajax
    Réponses: 1
    Dernier message: 01/02/2012, 11h17
  3. affichage de plusieurs images dans une même figure
    Par kawther dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 20/02/2009, 18h45
  4. Réponses: 6
    Dernier message: 23/02/2008, 11h17
  5. Réponses: 1
    Dernier message: 07/01/2006, 21h10

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