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 :

opengl sous visual c++ 6.0


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 12
    Points : 6
    Points
    6
    Par défaut opengl sous visual c++ 6.0
    bonjour tout le monde,

    j'ai réussi à faire un affichage d'un bras manipulateur dans une boite de dialogue mais pour associer les controles à la vue, par exemple un slider qui fait varier un angle pour réaliser une rotation du bras, j y arrive pas , j esseyé tout ce que je sait mais tjrs rien,

    c qlq peut m'aider je pourais avancer dans mon travail, je sais que c qlq chose de facil mais bon dès fois on se pert dans des futilité a dire vrais c pas des futilités mais de l'ignorance tt court
    merci d'avance

  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,
    c'est quoi le probleme exactement ?
    la manipulation du slider ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 12
    Points : 6
    Points
    6
    Par défaut attends je m'explique
    la manipulation du slider j y suis arriver à la faire, mm j ajouté un editbox pour voir l'incrementation, mais je dois associé la valeur recupperée du slider à une fonction qui fait une rotation au bras.

    l'affichage du bras s'effectue sur la mm boite dialogue.

  4. #4
    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
    re,
    tu interceptes le message NM_RELEASEDCAPTURE sur le slider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BEGIN_MESSAGE_MAP(CSpinsampleView, CFormView)
    	//{{AFX_MSG_MAP(CSpinsampleView)
    	ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
    	ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER1, OnReleasedcaptureSlider1)
    	//}}AFX_MSG_MAP
    //.....
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void CSpinsampleView::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    	// TODO: Add your control notification handler code here
    	CSliderCtrl *pSlider=static_cast<CSliderCtrl *>(GetDlgItem(IDC_SLIDER1));
        int n= pSlider->GetPos();
        CString str;
        str.Format("%02d",n);
        GetDlgItem(IDC_EDIT1)->SetWindowText(str); // maj de l'edit
    	*pResult = 0;
    }

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 12
    Points : 6
    Points
    6
    Par défaut re:
    le code que vous avez refilé conserne un projet basé sur une architecture doc/vue mais c la meme chose ,moi j fais ça dans "OnInitDialog()" et c le mm résultat. on obtient l'affichage dans l'edit box juste à coté.

    mais aprés je ne sais pas comment associé cette valeur à une rotation ou translation du bras , mon prog est basé sur une boite de dialogue.

  6. #6
    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
    re,
    boite de dialogue ou CFormview la gestion du message reste la même.
    par contre je ne comprends pas ce que tu veux dire:
    mais aprés je ne sais pas Crying or Very sad comment associé cette valeur à une rotation ou translation du bras , mon prog est basé sur une boite de dialogue.

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 12
    Points : 6
    Points
    6
    Par défaut re:
    ce que je veux dire

    c que je dois pouvoir manipuler un objet opengl en 3d avec des controles comme le slider ou edit box.

    et le but c de pouvoir voir dans la vue en mm temps que la valeur du slider qui incremente, l'objet 3d faire une rotation ou une translation.

    je sais que je suis pas trops claire mais j'esseye de faire le max
    merci

  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
    bon si j'ai bien compris ,il faut que lorsque le slider se deplace l'objet reagisse en meme temps ?
    le slider ne fournit le message de deplacement en temps reel .
    pour cela il faut faire une petite classe derivée :

    header :SliderEx.h
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #if !defined(AFX_SLIDEREX_H__7CFA68F6_DDE0_4B08_968E_725D25DD3F7F__INCLUDED_)
    #define AFX_SLIDEREX_H__7CFA68F6_DDE0_4B08_968E_725D25DD3F7F__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // SliderEx.h : header file
    //
    /////////////////////////////////////////////////////////////////////////////
    // CSliderEx window
     
    #define SLIDER_GETPOS 100
     
    class CSliderEx : public CSliderCtrl
    {
    // Construction
    public:
    	CSliderEx();
     
    // Attributes
    public:
        bool    m_bTracking;
    // Operations
    public:
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CSliderEx)
    	//}}AFX_VIRTUAL
     
    // Implementation
    public:
    	virtual ~CSliderEx();
     
    	// Generated message map functions
    protected:
    	//{{AFX_MSG(CSliderEx)
    	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
    	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    /////////////////////////////////////////////////////////////////////////////
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    #endif // !defined(AFX_SLIDEREX_H__7CFA68F6_DDE0_4B08_968E_725D25DD3F7F__INCLUDED_)
    source:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    // SliderEx.cpp : implementation file
    //
     
    #include "stdafx.h"
    #include "spinsample.h"
    #include "SliderEx.h"
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
     
    /////////////////////////////////////////////////////////////////////////////
    // CSliderEx
     
    CSliderEx::CSliderEx():m_bTracking(false)
    {
    }
     
    CSliderEx::~CSliderEx()
    {
    }
    BEGIN_MESSAGE_MAP(CSliderEx, CSliderCtrl)
    	//{{AFX_MSG_MAP(CSliderEx)
    	ON_WM_LBUTTONDOWN()
    	ON_WM_LBUTTONUP()
    	ON_WM_MOUSEMOVE()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // CSliderEx message handlers
    void CSliderEx::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    	// TODO: Add your message handler code here and/or call default
    	m_bTracking=true;
    	CSliderCtrl::OnLButtonDown(nFlags, point);
    }
    void CSliderEx::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    	// TODO: Add your message handler code here and/or call default
    	m_bTracking=false;
    	CSliderCtrl::OnLButtonUp(nFlags, point);
    }
    void CSliderEx::OnMouseMove(UINT nFlags, CPoint point) 
    {
    	// TODO: Add your message handler code here and/or call default
    	if(m_bTracking)
        {
            NMHDR hdr;
            hdr.hwndFrom = GetSafeHwnd();
            hdr.idFrom   = GetDlgCtrlID();
            hdr.code     = SLIDER_GETPOS;
            GetParent()->SendMessage(WM_NOTIFY, GetDlgCtrlID(), (LPARAM)&hdr);
        }
        CSliderCtrl::OnMouseMove(nFlags, point);
    }
    voila pour la classe .
    apres tu declares dans ta dialogue une variable controle sur ton slider
    et tu remplace le controle de base par CSliderCtrl
    tu rajoutes ce message manuellement :
    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
     
    BEGIN_MESSAGE_MAP(CSpinsampleView, CFormView)
    	//{{AFX_MSG_MAP(CSpinsampleView)
    	//}}AFX_MSG_MAP
        ON_NOTIFY(SLIDER_GETPOS,IDC_SLIDER1,OnSliderGetPos) // le message à rajouter manuellement. IDC_SLIDER1 est ici l'id de mon slider
    END_MESSAGE_MAP()
    // le message:
    void CSpinsampleView::OnSliderGetPos(NMHDR* pNMHDR, LRESULT* pResult)
    {
        CSliderCtrl *pSlider=static_cast<CSliderCtrl *>(GetDlgItem(IDC_SLIDER1));
        int n= pSlider->GetPos();
        CString str;
        str.Format("%02d",n);
        GetDlgItem(IDC_EDIT1)->SetWindowText(str);
    }
    ne pas oublier de rajouter dans le .h de la dialogue au dessus de
    DECLARE_MESSAGE_MAP()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //.....
    //}}AFX_MSG
       	void		 OnSliderGetPos(NMHDR* pNMHDR,LRESULT* pResult);
    	DECLARE_MESSAGE_MAP()
    void	 OnSliderGetPos(NMHDR* pNMHDR,LRESULT* pResult);
    voila quand le slider bouge l'edit est mis a jour en temps reel .
    dans le cas de ton dessin c'est pareil.

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 12
    Points : 6
    Points
    6
    Par défaut merci
    merci pour le code,

    si j bien compris le résultat du code est que on obtient une synchronisation entre le deplacement du slider et la valeur affichée dans l'Edit box.

    voilà ce que j fais moi, je ne sais pas si c la mm chose ou pas.

    j déclaré une variable de type entier m_nSlider dans "FastDlg.h" puis j associé au slider une varible de controle " m_Slider" de type CSliderctrl. pour la l'edit box j assicié la vraible str de type CString.

    puis j fait l'initialisation ds l'OnInitDialog():


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CString str;
    	CSliderCtrl *pSlide1 = (CSliderCtrl*) GetDlgItem(IDC_SLIDER1);
    	pSlide1->SetRange(0,100);
    	pSlide1->SetPos(m_nSlider);
    	str.Format("%d", pSlide1->GetPos());[/color]
    et dans DoDataExchange(CDataExchange* pDX):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(pDX->m_bSaveAndValidate)
    	{
    		TRACE(" m à j\n");
    		CSliderCtrl* pSlide1 = (CSliderCtrl*) GetDlgItem(IDC_SLIDER1);
    		m_nSlider=pSlide1->GetPos();
     
    	}
    ensuite j ajouté un msg windows:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void CFastDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
    {        CSliderCtrl *pSlide1=(CSliderCtrl*) pScrollBar;
    	CString str;
    	str.Format("%d", pSlide1->GetPos());
    	SetDlgItemText(IDC_EDIT1,str);
            GetDlgItem(IDC_EDIT1);
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    }
    Et pour mon affichage en 3D, j ajouté une nouvelle classe COpenGL basé sur generic CWnd. Qui contient toute les initialisation pour faire un cube en 3D.

    Ensuite dans le constructeur de la classe dialogue j ajouté un pointeurs vers la classe COpenGL

    Dans le de CFastDlg.h j ajouté :
    COpenGL *m_pDisplay;
    Puis dans CFastDlg.cpp j ajouté Le code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CFastDlg::CFastDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CFastDlg::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CFastDlg)
    	str = _T("");
    	//}}AFX_DATA_INIT
    	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
     
             // construction de la classe 
    		m_pDisplay = new COpenGL;
    }
    Puis j ajouté à la classe COpenGL une variable mmbre theta , et une fonction membre GetTheta(){ return theta}

    Ensuite j esseyé de reccuperer la valeur courante du slider dans la variable theta ,
    J ajouté dans OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        // pour reccuperer la valeur courante du slider 
                 theta=pSlide1->GetPos();  
       // pour metre à jours  la valeur de theta dans la classe COpenGL 
    	 m_pDisplay->GetTheta();
    est cette valeur de theta je l’utilise pour dans une function de rotation du Cube en 3d

    et c ce que je n'arrive pas à faire le slider bouge et je le cube reste figé.

    j essyé de mettre une capture de mon interface pour bien expliquer mais je ne sais pas comment faire j essyé de la mettre entre ça [img] capture [/img],
    mais apparment ça ne marche pas mais j'espère que je suis plus laire que la dernière fois
    le temps que je trouve comment la mettre cette capture je vous l'envois.

    merci , je sais bien que j pris un peu de votre temps mais bon j'arrive pas toute seule.
    encore fois merci

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 12
    Points : 6
    Points
    6
    Par défaut voici la capture de l'interface du cube
    voilà vous trouverez la capture sur ce lien :
    http://rymalunix.ifrance.com/docs.htm

Discussions similaires

  1. Problème OpenGL sous Visual C++ 2008
    Par shadow07 dans le forum Visual C++
    Réponses: 2
    Dernier message: 11/10/2011, 14h07
  2. Opengl sous Visual Studio 2010
    Par Ether_saturne dans le forum OpenGL
    Réponses: 5
    Dernier message: 02/05/2010, 23h14
  3. Réponses: 2
    Dernier message: 20/10/2007, 17h51
  4. Projet OpenGl sous visual - Quel type de projet?
    Par starkson dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 26/02/2007, 13h07
  5. [debutant]opengl avec sdl sous visual c++
    Par bourinator dans le forum OpenGL
    Réponses: 1
    Dernier message: 13/06/2005, 11h24

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