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

OpenGL Discussion :

OpenGL & API WIN32


Sujet :

OpenGL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut OpenGL & API WIN32
    Bonjour,

    J'ai déjà beaucoup cherché, mais n'ai pas trouvé la solution à mon problème :
    J'essaie de créer une sorte de paint 3D, en openGL, avec interface win32, le tout en C. J'utilise 4 viewports.



    J'ai une barre de menus en haut, et une barre de status en bas. Le problème est que dès que je prends en compte le message WM_PAINT, ces deux barres disparaissent, ou ne s'affichent pas bien ( Les boutons ne remontent pas un fois cliqués).
    De plus une partie de la zone où dessine opengl se situe en dessous de ces deux barres.

    Je ne sais pas comment faire pour redimensionner la zone où dessine opengl. La modification des dimensions des viewports ne change rien.

    Mon deuxième problème est le contour du viewport qui est actif. Une fois détecté je l'encadre :

    void dessineContours()
    {
    hpOld = SelectObject(DC,hp2px);
    if( !modePleinEcran )
    {
    switch( viewportActif )
    {
    case VIEWPORT1:
    MoveToEx(DC, 0, 0, NULL);
    LineTo(DC, largeur/2, 0);
    LineTo(DC, largeur/2, hauteur/2);
    LineTo(DC, 0, hauteur/2);
    LineTo(DC, 0, 0);
    break;
    case VIEWPORT2:
    MoveToEx(DC, largeur/2, 0, NULL);
    LineTo(DC, largeur, 0);
    LineTo(DC, largeur, hauteur/2);
    LineTo(DC, largeur/2, hauteur/2);
    LineTo(DC, largeur/2, 0);
    break;
    case VIEWPORT3:
    MoveToEx(DC, 0, hauteur/2, NULL);
    LineTo(DC, largeur/2, hauteur/2);
    LineTo(DC, largeur/2, hauteur);
    LineTo(DC, 0, hauteur);
    LineTo(DC, 0, hauteur/2);
    break;
    case VIEWPORT4:
    MoveToEx(DC, largeur/2, hauteur/2, NULL);
    LineTo(DC, largeur, hauteur/2);
    LineTo(DC, largeur, hauteur);
    LineTo(DC, largeur/2, hauteur);
    LineTo(DC, largeur/2, hauteur/2);
    break;
    }
    }
    }

    Le problème est que le contour n'a pas le temps de se refermer à chaque réaffichage de l'écran, et le viewport n'est donc pas complétement entouré.

    Voilà, merci par avance de votre aide

  2. #2
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Citation Envoyé par g0ku_0ne Voir le message
    J'ai une barre de menus en haut, et une barre de status en bas. Le problème est que dès que je prends en compte le message WM_PAINT, ces deux barres disparaissent, ou ne s'affichent pas bien ( Les boutons ne remontent pas un fois cliqués).
    Je suppose que tu récupère le message WM_PAINT dans ta callback de ta fenètre... penses tu à appeler quand même DefWindowProc pour que la fenètre garde le comportement par défaut de ta fenètre pour le dessin ??

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut
    Bonjour Raptor70,

    J'apelle DefWindowProc dans le default du switch comme ceci :

    case WM_PAINT:

    Draw();
    dessineContours();
    SwapBuffers( DC );

    break;

    default:
    return DefWindowProc( hWnd, iMsg, wParam, lParam );
    } /* Fin du switch(iMsg) */

  4. #4
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Citation Envoyé par g0ku_0ne Voir le message
    Bonjour Raptor70,

    J'apelle DefWindowProc dans le default du switch comme ceci :

    case WM_PAINT:

    Draw();
    dessineContours();
    SwapBuffers( DC );

    break;

    default:
    return DefWindowProc( hWnd, iMsg, wParam, lParam );
    } /* Fin du switch(iMsg) */
    Je me demande si il ne faut pas l'appeler aussi dans le message WM_PAINT pour que Windows redessine le reste de ta fênetre ( ton menu par exemple..) normallement..

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut
    Je l'apelle exactement comme ça, avec les meme paramètres ?

    J'apelle DefWindowProc dans le default du switch comme ceci :

    case WM_PAINT:

    Draw();
    dessineContours();
    SwapBuffers( DC );
    DefWindowProc( hWnd, iMsg, wParam, lParam );

    break;

    default:
    return DefWindowProc( hWnd, iMsg, wParam, lParam );
    } /* Fin du switch(iMsg) */

    Si c'est le cas, cela ne fonctionne pas, le programme se termine immédiatement.

    Sinon, c'est que j'ai mal compris ^

  6. #6
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Citation Envoyé par g0ku_0ne Voir le message
    Je l'apelle exactement comme ça, avec les meme paramètres ?

    J'apelle DefWindowProc dans le default du switch comme ceci :

    case WM_PAINT:

    Draw();
    dessineContours();
    SwapBuffers( DC );
    DefWindowProc( hWnd, iMsg, wParam, lParam );

    break;

    default:
    return DefWindowProc( hWnd, iMsg, wParam, lParam );
    } /* Fin du switch(iMsg) */

    Si c'est le cas, cela ne fonctionne pas, le programme se termine immédiatement.

    Sinon, c'est que j'ai mal compris ^
    C'etait bien ca que je proposais ... mais apparemment .. c'est faux

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut
    Non ce n'est pas grave, merci de m'avoir proposé une solution Erf, je désespère... J'ai l'impression d'être le seul à avoir ce problème...

  8. #8
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Citation Envoyé par g0ku_0ne Voir le message
    Non ce n'est pas grave, merci de m'avoir proposé une solution Erf, je désespère... J'ai l'impression d'être le seul à avoir ce problème...
    Un dernier essai ... mettre le DefWindProc juste après le case WM_PAINT ...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut
    Placé juste après le case WM_PAINT, le programme tourne comme avant, avec le même problème de réactualisation de la fenêtre windows...

    Je précise que j'ai déjà eu des problème de scintillements et je les éliminés en captant le message WM_ERASEBKGND:

    /* Permet d'éviter les scintillements du au déplacement de la fenêtre */

    case WM_ERASEBKGND:

    break;

    Je ne pense pas que ça ai avoir grand chose avec mon problème actuel...

Discussions similaires

  1. [Débutant]Quelques questions de principe sur l'API win32
    Par silver_dragoon dans le forum Windows
    Réponses: 4
    Dernier message: 19/03/2004, 18h38
  2. [API WIN32] Pb avec SHGetSpecialFolderLocation
    Par Invité dans le forum MFC
    Réponses: 3
    Dernier message: 27/01/2004, 21h19
  3. [API Win32] WriteFile()
    Par tut dans le forum MFC
    Réponses: 2
    Dernier message: 27/01/2004, 16h13
  4. API Win32
    Par benoit70 dans le forum MFC
    Réponses: 8
    Dernier message: 26/01/2004, 19h11
  5. [API win32] Récupérer le répertoire d'un profile
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/09/2002, 12h38

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